问题标签 [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 回答
1772 浏览

java - JNA 和 ZBar(条码阅读器库)

我正在使用JNA for ZBar(library for bar code reader)创建 Java 接口。

在 JNA 中,需要声明 C 中的结构。例如::

但是在 ZBar 中,结构没有成员。例如::

这没有声明结构的大小或成员。

如何在 JNA 中为这些结构编写接口?

0 投票
1 回答
844 浏览

java - Java 和 gstreamer-java 初始化错误

我正在构建一个小应用程序,它将在 java 中播放来自互联网的流式音频(主要是互联网广播电台)。我决定为声音使用 gstreamer-java 库,它使用 JNA。

我想在代码中包含一个检查,以查看 gstreamer 库是否已初始化。当我离开“Gst.init()”代码时(模拟库没有正确初始化的情况),应用程序抛出以下消息:

该应用程序调用 gstreamer-java 库。出现错误消息,但线程继续运行,占用 CPU。

有没有办法捕捉错误或添加检查以防止它发生?

另一种方法是将“Gst.init()”放在主类中,但我不确定这是否总能保证 gstreamer 库已初始化。

0 投票
2 回答
2307 浏览

java - 结构复杂的 JNA

最终,我想确定运行我的程序的机器是笔记本电脑还是台式机。我想使用 JNA 和 msn 的 PowrProf 库、使用 LidPresent 标志的GetPwrCapabilities 函数来执行此操作。

结构的一部分SYSTEM_POWER_CAPABILITIES(这是GetPwrCapabilities()方法的参数)

SYSTEM_POWER_STATE 枚举:

枚举在此处进行了解释,但我不确定我是否正确执行此操作,因为我收到此错误:

线程“main”中的异常 java.lang.IllegalArgumentException:类 JNAPlayground$PowrProf$SYSTEM_POWER_CAPABILITIES 中的结构字段无效,字段名称“AcOnLineWake”,接口 JNAPlayground$PowrProf$SYSTEM_POWER_STATE:不支持类型“JNAPlayground$PowrProf$SYSTEM_POWER_STATE”:本机“JNAPlayground$PowrProf$SYSTEM_POWER_STATE”类型的大小未知

您能否指导我或为我指明正确的方向:
- 数组
- 枚举(如果我错了)
- 如果我没有导入足够的库

到目前为止我的java代码:

谢谢,埃里克

0 投票
2 回答
817 浏览

c - 用 C(不是 C++)在 Visual Studio 中编写 dll 导致无法解析的符号

我一直在通过MSDN上的 dll 演练,它工作正常。然后我删除了 dll 中的所有 C++ 样式代码并将其替换为 C 等效代码,它仍然有效。

但是,当我将文件从 X.cpp 重命名为 Xc(我猜这会导致在 C 模式下编译)时,对于 dll 中的每个函数,我都会收到错误 LNK2019(未解析的外部符号)。出于我的目的,dll 必须使用 C 而不是 C++,因为这是 Java Native Access 所支持的。

这是dll的标题:

这是使用 dll 的 (C++) 测试程序的主体:

(只是为了澄清测试程序在 C++ 中很好;它只是我试图用 C 编译的 dll)。

0 投票
1 回答
3338 浏览

c - 试图在 Visual Studio 中创建 Java Native Access 将接受的“Hello Word”dll

我已经在 Linux 和 Mac 上成功编译了我的库,并将其与 Java Native Access 一起使用。不幸的是,我所做的一切似乎都不适用于 Visual Studio 的编译器和 Java Native Access。

我将回到基础并尝试在 Visual Studio 中创建一个可以使用 Java Native Access 的超级简单的 dll,任何帮助将不胜感激。

这是 GimmeFiveDll.c:

这是 SystemLibrary.java:

我已经尝试在 Visual Studio 中将调用接口切换为 stdcall。我没有对新项目向导的空项目 dll win32 控制台默认值进行任何其他更改。在上面的示例中,生成的 dll 甚至没有根据dumpbin.exe /exports. 我的真实项目确实正确导出了它们,但无论哪种方式,我总是得到相同的 JNA 异常:

(是的,我将 GimmeFiveDll.dll 放在 System32 中。是的,我可以使用 JNA 访问 Windows 附带的 System32 中的其他 dll)。

有人愿意帮我完善这个 JNA 喜欢的由 Visual Studio 创建的 dll 的极简示例吗?

非常感谢。

0 投票
3 回答
625 浏览

java - 结构中缺少 JNAerator 未命名联合

我试图让 JNAerator 从 C 共享库生成一些 JNA 支持的 Java 代码,一切都很好,只是它无法生成嵌套在结构内的未命名联合。

例子:

如果我更改标题以使联合具有名称,它将起作用。但是由于显而易见的原因,我不能只更改标题而不破坏我尝试使用的共享库。

除了将头文件和共享库更改为命名联合之外的任何解决方案?

0 投票
2 回答
1317 浏览

java - 一个本地库依赖于另一个本地库的搜索路径

我正在使用 JNA 和 Java,但我认为这个问题会影响任何本地到非本地的桥梁。

我有一个依赖 lib1.dylib 的 Java 应用程序,而 lib1.dylib 依赖于 lib2.dylib。

我想将所有内容都放在 Mac 上的 .app 文件中。我可以轻松地将 lib1.dylib 放入其中并设置 java.classpath(或 NativeLibrary.addSearchPath())来告诉 JVM 在哪里可以找到 lib1.dylib。问题是,我不知道如何传达 lib1.dylib 的依赖项也在我提供的位置。结果是 lib1 加载正常,但随后找不到 lib2,因为它不在操作系统的库路径中。

任何人都知道我可以如何克服这个问题?我想它一定会出现在拥有大量共享库的大型项目中。

0 投票
1 回答
1210 浏览

java - 是由 jvm 限制的 C 代码在 JNA(或 JNI)中分配的内存(参数 -Xmx 或架构 32/64)

也就是说,在 C 部分中请求 5 mb 的 malloc() 是否会因以下原因而失败:

  • jvm 使用 -Xmx32m 运行,jvm 堆已经是 30 mb
  • 与 jvm 在 64 位窗口中是 32 位有关
0 投票
2 回答
918 浏览

java - 我可以将 JNA 与 JNI 混合使用吗

我有一个使用 JNA 从 Java 访问的自定义 dll。到目前为止,一切都很完美。但是现在我想从我的 C 代码创建 Java 类。我认为这不能用 JNA 完成,所以我所做的是创建一个 JNI 方法,但这导致我遇到 UnsatisfiedLinkError 的问题。所以我的问题是:我可以在访问同一个 DLL 时混合使用 JNA 和 JNI,如果可以,我应该怎么做?

0 投票
1 回答
322 浏览

java - 我可以指出我做错了什么吗?尝试使用 JNA 将 VB 映射到 Java 以访问该库

原始工作 VB_Code

Java 代码(简体)

运行 lib.Inventory 时发生错误。lib.Inventory 用于从 RFID 阅读器获取标签。如果没有标签,则没有错误。

错误代码

包含更多信息的错误报告文件保存为:C:\eclipse\workspace\FelmiReader\hs_err_pid5744.log