Say I have a C++ DLL with a single exported method such as:
CustomerProcessor* getInstance();
i.e. it simply returns an instance of the class that actually contains the methods I need to call.
I know I can map the getInstance() method to a Class in Java using JNA (extending com.sun.jna.Library), store the returned CustomerProcessor instance in a com.sun.jna.Pointer.
Can I then somehow map this to the CustomerProcessor class so that I can call methods upon it (and if so, how)?
For any arbitrary type* function()
definition you can map the method using JNA as returning a com.sun.jna.Pointer
, but you won't be able to invoke methods on a C++ object from JNA.
A simple workaround for this would be to write a C interface library that simply invokes the method on the objects for you...so if you have some member function foo()
you could export a C method from your C++ code:
extern "C" void bar(type* var){
var->foo();
}
Obviously this will add some work for you...but I suspect the overhead for switching to JNI would be about the same.
JNAerator may facilitate doing what you ask. It has some support for demangling and vtable access (required for calling *this methods).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With