问题标签 [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 投票
1 回答
73 浏览

java - 定位库

我在 Mac OS X 和 Linux 上玩 JNA。我的问题是如果我正在寻找一个函数“if_nametoindex”如何确定要加载哪个库?我能找到的大多数示例都集中在 Windows 上,它们加载“kernel32”。

0 投票
1 回答
663 浏览

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。

还是我的逻辑有问题?

0 投票
5 回答
9831 浏览

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 的图像...

0 投票
3 回答
36580 浏览

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 上得到了完全相同的异常。

我如何让它运行?

0 投票
1 回答
1812 浏览

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 项目所有者。总结一下:

更新 #2: Olivier在意识到缺少 TestLibrary.java 不是错误后再次做出回应,因为它默认嵌入在生成的 Test.jar 文件中。

0 投票
2 回答
6466 浏览

java - JNA - 在从 DLL 传回的 C++ 实例上调用方法

假设我有一个带有单个导出方法的 C++ DLL,例如:

即它只是返回一个实际包含我需要调用的方法的类的实例。

我知道我可以使用 JNA(扩展 com.sun.jna.Library)将 getInstance() 方法映射到 Java 中的类,将返回的 CustomerProcessor 实例存储在 com.sun.jna.Pointer 中。

然后我可以以某种方式将其映射到 CustomerProcessor 类,以便我可以调用它的方法(如果可以,如何调用)?

0 投票
1 回答
203 浏览

java - 通过 JNA 使用 CFBooleanRef

我正在使用 JNA 调用 Carbon API。我要调用的特定 API 调用将 CFBooleanRef 作为参数。值 kCFBooleanTrue 和 kCFBooleanFalse 在头文件中被声明为直接外部引用。

如何在 Java 端获取对这两个值的引用,以便将值传递给 API 调用?

0 投票
3 回答
7310 浏览

java - 使用 JNA 获取/设置应用程序标识符

我之前关于 Windows 7 任务栏的问题之后,我想诊断一下为什么 Windows 不承认我的应用程序独立于javaw.exe. 我目前有以下 JNA 代码来获取AppUserModelID

应用程序的输出看似乱码:

意识到输出可能是 UTF-16 的事实,在 (3) 中,我尝试从 UTF-16 转换字节数组。老实说,我不知道我的方法是否正确,因为 (a) 我不知道 a 的大小PWSTR和 (b) 我不知道是否GetCurrentProcessExplicitAppUserModelID确实返回了字节数组或字符串。

我知道 JSmooth 将在模拟这种效果的包装器中运行 GUI 进程。Launch4j 声称可以这样做,但似乎不起作用。无论 Java 包装器如何,我都希望拥有该AppUserModelID套件。

这里出了什么问题?

0 投票
1 回答
618 浏览

dll - 将 jna 与 FAR PASCAL 自定义 dll 一起使用

我正在使用 JNA 访问似乎使用 FAR PASCAL 调用约定的自定义 DLL,但是每次我尝试访问它时 JVM 都会崩溃。

dll 的开发指南说: BOOL FAR PASCAL GetIomemVersion(LPSTR);

Dependency Walker 告诉我:_GetIomemVersion@4

使用 C# 代码,它可以很好地使用

你能告诉我我做错了什么吗?提前致谢!!!

0 投票
1 回答
614 浏览

java - JNA - DsGetDcNameA

我是 JNA 的新手,我想将 DsGetDcName 方法转换为 JNA。

我已将上述函数转换为 JNA 我将上述参数替换如下

上述函数返回997 Error (ERROR IO PENDING). 方法声明是正确的。可以在这个问题上提供任何帮助吗?提前致谢。

问候

帕万·库马尔 A.