【发布时间】:2014-10-02 13:04:46
【问题描述】:
我需要调用具有以下原型的专有 DLL 函数(为清楚起见进行了简化):
int J_Image_OpenStream(J_IMG_CALLBACK_OBJECT obj, J_IMG_CALLBACK_FUNCTION function);
类型定义为:
class CJDummyClass
{
};
typedef CJDummyClass * J_IMG_CALLBACK_OBJECT;
typedef void (CJDummyClass::*J_IMG_CALLBACK_FUNCTION)(J_tIMAGE_INFO * pAqImageInfo);
我之前在 JNA 中使用过 HOOKPROC 回调,但没有使用 Callback。看来我在这里连Callback 都不能用了。
由于我不知道如何在 Java 中扩展 CJDummyClass 类,我只是尝试了这个:
public class MyCallback implements Callback {
public void callback() { System.out.println("Here"); }
}
MyCallback callback = new MyCallback();
lib.J_Image_OpenStream(callback.getClass, callback);
它给出:
IllegalArgumentexception: Unsupported argument type java.lang.Class at parameter 0 of function J_Image_OpenStream
【问题讨论】:
-
这是一个成员函数指针。您将无法与 JNA 一起工作。在此处查看使用 JavaCPP 的解决方案:stackoverflow.com/a/25934842/523744