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

标签 java jna

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

CustomerProcessor* getInstance();

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

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

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

最佳答案

对于任意 type* function() 定义,您可以使用 JNA 将方法映射为返回 com.sun.jna.Pointer,但您不会能够从 JNA 调用 C++ 对象上的方法。

一个简单的解决方法是编写一个 C 接口(interface)库,它只为您调用对象上的方法...因此,如果您有一些成员函数 foo(),您可以导出一个C++ 代码中的 C 方法:

extern "C" void bar(type* var){
   var->foo();
}

显然这会为您增加一些工作...但我怀疑切换到 JNI 的开销将大致相同。

关于java - JNA - 在从 DLL 传回的 C++ 实例上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873194/

相关文章:

java - java 幕后对象创建(java 对象实例化)

java - 让一个按钮执行 2 项工作

java - 如何让 JNA 从一个 jar 文件中提取多个 DLL 文件?

java - 如何将 Java 空参数传递给使用 JNA 编译为 C 代码的 native 方法?

java - 如何在 Horizo​​ntalview 中将 imageview 显示为 slider ,它将显示为列表但仅关注一个项目

java - 在 Java 中捕获通用异常?

java - 将域名插入 servlet 身份验证 token

适用于 Windows VHD API 的 Java 库

java - 找不到指定的程序 (MapVirtualKeyEx) JNA (Java)

Java:使用 Wordnet 和 JWNL 保留词干后的点