问题标签 [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.
java - 通过 JNA 将 InputStream 作为文件指针传递给 C 代码
我有一个用 C 编写的 DLL(我无法编辑),它有一些看起来像的函数原型
我想为 DLL 创建一个 JNA 接口,但不清楚我需要为 FILE *bar 参数传递什么。我假设我需要传递一个 InputStream(这是我的偏好),但 JNA 文献在这个主题上似乎很少。
Java 接口会是什么样子?我真的需要传递给 foo 什么?
编辑: foo 假设 bar 是 fopen 的结果并调用 fscanf 之类的操作。
编辑 2:最终,我在 Java 中有一个字符串,我需要在 C 中读取它,就好像它是一个文件一样(这可能是一个完全不同的问题)。理想情况下,我想避免写入文件,这就是为什么将 InputStream 转换为 C 文件指针如此可取(而且显然非常困难)的原因。
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 就会抓取它的现有实例,但我不想依赖这种非常特定于订单的策略。
java - 使用 JNA 将 C 数组返回给 Java
我对 C 不太熟悉,但我需要在我的 java 代码中使用 C 库。我已经创建了 DLL 并且能够很好地访问它,但是我试图将一个整数数组从 C 代码返回到 java 代码。
在 CI 中,您可以简单地返回一个指向数组的指针,但它不像我在 Java 代码中所期望的那样工作。这是C代码:
如果我通过这样做在 C++ 中测试它
然后它工作正常,我得到了预期的值 739、255。
我尝试在 Java 中将它与 JNA 包一起使用(但这给了我 739,-16777214):
在 JNA 文档中,它说原始数组,例如int *buf
将int[] buf
在 Java 中映射到的,但是当我尝试将返回类型从IntByReference
to更改为时,int[]
我得到了非法 ArgumentException。
我不知道我是否从 C 中正确返回了数组,或者我只是没有在 Java 中正确访问它。任何帮助,将不胜感激。
c# - Java 中的 IntPtr (C#) 等价于什么?
Java (JNA) 中的 IntPtr (C#) 等价于什么?
java - JNA-映射德尔福函数
我如何用 JNA 映射这个函数:
德尔福代码:
返回的 int 值可以是 0 表示错误或 1 表示正确执行;
我的建议是:
Java代码:
问题是dll的函数返回0。我也尝试了其他数据类型,但它没有工作。我认为问题在于dll函数无法写入参数outData1和outData2。
谁能帮帮我?....谢谢!!
java - 使用 JNI 代替 JNA 调用原生代码?
与 JNI 相比,JNA 似乎更容易用于调用本机代码。在什么情况下你会使用 JNI 而不是 JNA?
java - 使用 JNA 创建 CFString 对象
我正在尝试将 JNA 与 Mac OS X 一起使用。我想访问一个 Carbon 库,没有 Cocoa 等价物,所以 Rococoa 帮不了我(我认为......)
尝试调用需要 CFStringRef 作为参数的 Carbon 函数时,我被卡住了。如何从 Java 字符串创建 CFStringRef?
到目前为止,这是我的尝试:
java - 使用 Rococoa 对位置的无效内存访问
我一直在尝试使用 rococoa(java 到 osx cocoa api 库)编写一个简单的屏幕截图应用程序,并设法实际拍摄屏幕截图,然后将其保存到文件中。不幸的是,有时,应用程序会因“位置的内存访问无效...”错误而失败。我假设这是由于某些东西被垃圾收集,因为我无法保持引用活着。导致崩溃的行是: int[] data = pointer.getIntArray(0, bytesPerPlane / 4);
我真的没有用Objective C编写任何东西,只是从rococoa开始,所以我发现自己对此感到困惑。我已经复制了下面的相关代码,非常感谢任何帮助!
java - jna 在关闭挂钩中调用 kernel32.CreateToolhelp32Snapshot 使 VM 崩溃
如果一个线程使用设置关闭钩子
通过 jna 调用方法:
它使虚拟机崩溃。如果我在
钩子,调用不会使虚拟机崩溃。
知道为什么吗?
如果有任何用处,我可以发布部分 VM 崩溃错误报告。
编辑:查看pastebin 上的 VM 崩溃报告
java - 如何在 Delphi 中调试从 Java 调用的 DLL?
使用 Delphi,我编写了一个 DLL,可以通过JNA (Java Native Access)从 Java 调用。此 DLL 中的方法只是简单的操作,但对于将来的使用和更复杂的调用,如果直接从 Java(或从 Java IDE)调用 DLL,我想知道如何使用 Delphi 调试器。