gpt4 book ai didi

java - 通过 JNA 将 InputStream 作为文件指针传递给 C 代码

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:51 24 4
gpt4 key购买 nike

我有一个用 C 编写的 DLL(我无法编辑),它有一些看起来像的函数原型(prototype)

#include <stdio.h>
void foo(FILE *bar);

我想为 DLL 创建一个 JNA 接口(interface),但不清楚我需要为 FILE *bar 参数传递什么。我假设我需要传递一个 InputStream(这是我的偏好),但 JNA 文献似乎很少涉及这个主题。

Java 界面会是什么样子?我真正需要传递给 foo 的是什么?

编辑:foo 假定 bar 是 fopen 的结果并调用 fscanf 等操作。

编辑 2:最终,我在 Java 中有一个字符串,我需要在 C 中读取它,就好像它是一个文件一样(这可能完全是一个不同的问题)。理想情况下,我想避免写入文件,这就是为什么将 InputStream 转换为 C 文件指针是如此可取(而且显然非常困难)。

最佳答案

我不相信你能做到这一点 - 你没有简单的方法来访问 InputStream 实例的内部,甚至 FileInputStream 也很可能不会在 stdio FILE * 之上实现。要了解您的 Java 界面应该是什么样子,您需要发布更多关于 foo 函数的信息 - 它的作用以及您如何使用它。

如果您不关心FILE * 实际做什么,您可以使用JNA 编写代码来调用fopen,传入文件名和打开模式,并将结果作为不透明值传递给 foo,例如(伪代码):

path = "MyFile.txt";
bar = Libc.fopen(path, "r");
Libfoo.foo(bar);

更新:如果您需要一个字符串,其中包含您需要将其视为文件中的数据,我认为您运气不好。不幸的是,标准 C 库不是建立在流抽象之上的,这意味着您不太可能实现您想要的,除非您可以打开看起来像文件名但会导致您的字符串数据的内容;但是,硬着头皮将字符串保存到临时文件,然后使用 fopen 打开它会容易得多:-(

关于java - 通过 JNA 将 InputStream 作为文件指针传递给 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com