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

Wil*_*iam 6 java jna

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

CustomerProcessor* getInstance();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mar*_*iot 3

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

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

extern "C" void bar(type* var){
   var->foo();
}
Run Code Online (Sandbox Code Playgroud)

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