问题标签 [jna]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2160 浏览

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

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

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

Java 接口会是什么样子?我真的需要传递给 foo 什么?

编辑: foo 假设 bar 是 fopen 的结果并调用 fscanf 之类的操作。

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

0 投票
4 回答
21904 浏览

java - 在 OSGi 包中加载 DLL(使用 JNA)

OSGi 找不到我的 DLL 文件,我似乎不知道为什么。

目前我foo.dll在我的包的根目录中有 DLL 文件 (),我也尝试将它放在一个libs目录中。

有问题的捆绑包的清单如下所示:

然后在我的 JNA 界面中执行 loadLibrary (根据文档):

然后在另一个类中我尝试使用 JNA 接口

我通过另一个包(导出 com.sun.jna 和上面导入的其他包)提供了 JNA,但也尝试使用此处定义的包打包它(并在这种情况下将其添加到类路径等)。

我也尝试过指定Bundle-NativeCode: /foo.dll.

同样有趣的是,这些是相关的 OSGi 属性(我使用getprop

即使在这一切之后(以及我所做的每一次试验),我总是会遇到以下错误(并且没有显示堆栈跟踪):

......所以我错过了什么?

编辑:我还应该注意,我已经成功测试了 JNA 接口代码和它作为 JUnit 测试程序的一部分与之交谈的 DLL。

编辑 2:将此代码添加到调用该库的类似乎允许 JNA 找到该库(Native.loadLibrary稍后调用时)。看来我应该能够根据清单中的 Bundle-NativeCode 指令避免此调用。显然,一旦库被加载,Native.loadLibrary 就会抓取它的现有实例,但我不想依赖这种非常特定于订单的策略。

0 投票
3 回答
6265 浏览

java - 使用 JNA 将 C 数组返回给 Java

我对 C 不太熟悉,但我需要在我的 java 代码中使用 C 库。我已经创建了 DLL 并且能够很好地访问它,但是我试图将一个整数数组从 C 代码返回到 java 代码。

在 CI 中,您可以简单地返回一个指向数组的指针,但它不像我在 Java 代码中所期望的那样工作。这是C代码:

如果我通过这样做在 C++ 中测试它

然后它工作正常,我得到了预期的值 739、255。

我尝试在 Java 中将它与 JNA 包一起使用(但这给了我 739,-16777214):

在 JNA 文档中,它说原始数组,例如int *bufint[] buf在 Java 中映射到的,但是当我尝试将返回类型从IntByReferenceto更改为时,int[]我得到了非法 ArgumentException。

我不知道我是否从 C 中正确返回了数组,或者我只是没有在 Java 中正确访问它。任何帮助,将不胜感激。

0 投票
2 回答
3919 浏览

c# - Java 中的 IntPtr (C#) 等价于什么?

Java (JNA) 中的 IntPtr (C#) 等价于什么?

0 投票
2 回答
1761 浏览

java - JNA-映射德尔福函数

我如何用 JNA 映射这个函数:

德尔福代码:

返回的 int 值可以是 0 表示错误或 1 表示正确执行;

我的建议是:

Java代码:

问题是dll的函数返回0。我也尝试了其他数据类型,但它没有工作。我认为问题在于dll函数无法写入参数outData1和outData2。

谁能帮帮我?....谢谢!!

0 投票
10 回答
49909 浏览

java - 使用 JNI 代替 JNA 调用原生代码?

与 JNI 相比,JNA 似乎更容易用于调用本机代码。在什么情况下你会使用 JNI 而不是 JNA?

0 投票
1 回答
806 浏览

java - 使用 JNA 创建 CFString 对象

我正在尝试将 JNA 与 Mac OS X 一起使用。我想访问一个 Carbon 库,没有 Cocoa 等价物,所以 Rococoa 帮不了我(我认为......)

尝试调用需要 CFStringRef 作为参数的 Carbon 函数时,我被卡住了。如何从 Java 字符串创建 CFStringRef?

到目前为止,这是我的尝试:

0 投票
2 回答
1062 浏览

java - 使用 Rococoa 对位置的无效内存访问

我一直在尝试使用 rococoa(java 到 osx cocoa api 库)编写一个简单的屏幕截图应用程序,并设法实际拍摄屏幕截图,然后将其保存到文件中。不幸的是,有时,应用程序会因“位置的内存访问无效...”错误而失败。我假设这是由于某些东西被垃圾收集,因为我无法保持引用活着。导致崩溃的行是: int[] data = pointer.getIntArray(0, bytesPerPlane / 4);

我真的没有用Objective C编写任何东西,只是从rococoa开始,所以我发现自己对此感到困惑。我已经复制了下面的相关代码,非常感谢任何帮助!


0 投票
2 回答
816 浏览

java - jna 在关闭挂钩中调用 kernel32.CreateToolhelp32Snapshot 使 VM 崩溃

如果一个线程使用设置关闭钩子

通过 jna 调用方法:

它使虚拟机崩溃。如果我在

钩子,调用不会使虚拟机崩溃。

知道为什么吗?

如果有任何用处,我可以发布部分 VM 崩溃错误报告。

编辑:查看pastebin 上的 VM 崩溃报告

0 投票
3 回答
1077 浏览

java - 如何在 Delphi 中调试从 Java 调用的 DLL?

使用 Delphi,我编写了一个 DLL,可以通过JNA (Java Native Access)从 Java 调用。此 DLL 中的方法只是简单的操作,但对于将来的使用和更复杂的调用,如果直接从 Java(或从 Java IDE)调用 DLL,我想知道如何使用 Delphi 调试器。