假设我有一个带有单个导出方法的 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/