问题标签 [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 - 定位库
我在 Mac OS X 和 Linux 上玩 JNA。我的问题是如果我正在寻找一个函数“if_nametoindex”如何确定要加载哪个库?我能找到的大多数示例都集中在 Windows 上,它们加载“kernel32”。
java - JNA ByteBuffer statvfs
我正在尝试使用来自 java 的 statvfs 调用来获取 / 文件夹上的可用空间,
我从 c 检查了 statvfs 结构的大小,它显示 44 个字节,我使用 java.nio.ByteBuffer.allocateDirect 44 个字节分配了一个字节缓冲区,它的顺序设置为 44 个字节。当我调用 statvfs 时,我得到的返回值为 0,所以我假设调用成功,但我似乎无法使用 buffer.getInt 从 ByteBuffer 中获取信息,返回 512 f_bsize 这是正确的,但之后我无法读取.
buffer.getInt(12) 应该给我 f_blocks 但我得到 0。
还是我的逻辑有问题?
java - JNA/ByteBuffer 没有被释放并导致 C 堆内存不足
首先让我说我对 JNA 和 Java 如何直接分配本机内存的理解充其量是发自内心的,所以我试图描述我对正在发生的事情的理解。除了响应之外的任何更正都会很棒......
我正在运行一个使用 JNA 混合 Java 和 C 本机代码的应用程序,并且正在运行 Java 垃圾收集器无法释放对直接本机内存分配的引用,从而导致 C 堆内存不足的可重现问题。
我很肯定我的 C 应用程序不是分配问题的根源,因为我将 a 传递java.nio.ByteBuffer
到我的 C 代码中,修改缓冲区,然后在我的 Java 函数中访问结果。我在每个函数调用期间都有一个malloc
和一个对应free
的,但是在 Java 中反复运行代码后,malloc 最终会失败。
这是一组显示该问题的有点琐碎的代码——实际上,我试图在函数调用期间在 C 堆上分配大约 16-32MB。
我的 Java 代码执行以下操作:
那么我的 C 代码可能是这样的:
问题是在反复调用这个函数后,Java 堆有点稳定(增长缓慢),但 C 函数最终无法分配更多内存。在高层次上,我认为这是因为 Java 正在为 C 堆分配内存,但没有清理指向该内存的 ByteBuffer,因为 Java ByteBuffer 对象相对较小。
到目前为止,我发现在我的函数中手动运行 GC 将提供所需的清理,但这似乎既是一个糟糕的主意,也是一个糟糕的解决方案。
我怎样才能更好地管理这个问题,以便适当地释放 ByteBuffer 空间并控制我的 C 堆空间?
我对问题的理解是否不正确(我是否运行不正确)?
编辑:调整缓冲区大小以更能反映我的实际应用程序,我正在分配大约 3000x2000 的图像...
java - JNA 示例程序 java.lang.NoClassDefFoundError
我可以编译这个 JNA 示例代码(来自https://github.com/twall/jna/#getting_started的第 2 步):
...使用javac -classpath .:jna.jar -g HelloWorld.java
没有错误。(我下载了jna.jar,现在和HelloWorld.java放在同一个目录下。)
但是当我使用 运行它时java -classpath .:jna.jar HelloWorld
,我得到:
我在 Mac OS X 和 Linux 上得到了完全相同的异常。
我如何让它运行?
java - 用于生成 Java JNA 包装器的 jnaerator 的 SimpleMeaningfulExample 不起作用
我尝试了 jnaerator SimpleMeaningfulExample ( http://code.google.com/p/jnaerator/wiki/SimpleMeaningfulExample ) 并得到:
…在运行 Java 1.5.0_20 的 Mac OS X 10.5.8 和 Ubuntu 8.04 上。
我在 Mac OS X 上切换到 1.6.0_15 并再次尝试并得到:
难道我做错了什么?
更新:我将我的问题发布到users@jna.dev.java.net(请参阅此线程:https ://jna.dev.java.net/servlets/BrowseList?list=users&by=thread&from=2312620 )并收到 Olivier 的回复Chafik,JNAerator 项目所有者。总结一下:
- 我在 JNAerator 中发现了一个回归
- 他上传了一个固定的快照构建:http: //jnaerator.sourceforge.net/maven/com/jnaerator/jnaerator/0.9.3-SNAPSHOT/
- 该构建效果更好,但没有生成 TestLibrary.java
- 我提交了一个错误报告:http ://code.google.com/p/jnaerator/issues/detail?id=50
更新 #2: Olivier在意识到缺少 TestLibrary.java 不是错误后再次做出回应,因为它默认嵌入在生成的 Test.jar 文件中。
java - JNA - 在从 DLL 传回的 C++ 实例上调用方法
假设我有一个带有单个导出方法的 C++ DLL,例如:
即它只是返回一个实际包含我需要调用的方法的类的实例。
我知道我可以使用 JNA(扩展 com.sun.jna.Library)将 getInstance() 方法映射到 Java 中的类,将返回的 CustomerProcessor 实例存储在 com.sun.jna.Pointer 中。
然后我可以以某种方式将其映射到 CustomerProcessor 类,以便我可以调用它的方法(如果可以,如何调用)?
java - 通过 JNA 使用 CFBooleanRef
我正在使用 JNA 调用 Carbon API。我要调用的特定 API 调用将 CFBooleanRef 作为参数。值 kCFBooleanTrue 和 kCFBooleanFalse 在头文件中被声明为直接外部引用。
如何在 Java 端获取对这两个值的引用,以便将值传递给 API 调用?
java - 使用 JNA 获取/设置应用程序标识符
继我之前关于 Windows 7 任务栏的问题之后,我想诊断一下为什么 Windows 不承认我的应用程序独立于javaw.exe
. 我目前有以下 JNA 代码来获取AppUserModelID
:
应用程序的输出看似乱码:
意识到输出可能是 UTF-16 的事实,在 (3) 中,我尝试从 UTF-16 转换字节数组。老实说,我不知道我的方法是否正确,因为 (a) 我不知道 a 的大小PWSTR
和 (b) 我不知道是否GetCurrentProcessExplicitAppUserModelID
确实返回了字节数组或字符串。
我知道 JSmooth 将在模拟这种效果的包装器中运行 GUI 进程。Launch4j 声称可以这样做,但似乎不起作用。无论 Java 包装器如何,我都希望拥有该AppUserModelID
套件。
这里出了什么问题?
dll - 将 jna 与 FAR PASCAL 自定义 dll 一起使用
我正在使用 JNA 访问似乎使用 FAR PASCAL 调用约定的自定义 DLL,但是每次我尝试访问它时 JVM 都会崩溃。
dll 的开发指南说: BOOL FAR PASCAL GetIomemVersion(LPSTR);
Dependency Walker 告诉我:_GetIomemVersion@4
使用 C# 代码,它可以很好地使用
你能告诉我我做错了什么吗?提前致谢!!!
java - JNA - DsGetDcNameA
我是 JNA 的新手,我想将 DsGetDcName 方法转换为 JNA。
我已将上述函数转换为 JNA 我将上述参数替换如下
上述函数返回997 Error (ERROR IO PENDING)
. 方法声明是正确的。可以在这个问题上提供任何帮助吗?提前致谢。
问候
帕万·库马尔 A.