2009-12-09 81 views
5
传回在C++的实例方法

说我有一个单一的出口方式,如C++ DLL:JNA - 从调用DLL

CustomerProcessor* getInstance(); 

也就是说,它只是返回实际包含方法的类的实例,我需要打电话。

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

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

+0

根据这个问题,你不能在JNA中调用C++方法:http://stackoverflow.com/questions/1556421/use-jni-instead-of-jna-to-call-native-code – dfa 2009-12-09 11:18:10

回答

2

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

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

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

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

+0

我已经实际上已经走了写一个C++包装的路线,但想知道是否有消除它。非常感谢澄清。 – William 2009-12-10 17:30:21

1

JNAerator(http://code.google.com/p/jnaerator/)可能会帮助您完成您的要求。它有一些对demangling和vtable访问的支持(调用这个方法需要)。