我有C函数,函数指针回调如下
lm_cont* lm_start(lm_cont *context, int (*lm_rep)(lm_cont))
{
....
.....
}
我正在尝试创建JNA转换
创建一个回调接口,如下所示
public interface lmCallback {
public int lm_rep(lm_cont test);
}
然后在main方法中,加载dll并调用本机函数。 注意:lm_cont是我作为Java类创建的结构。
public static void main(String[] args) {
JavaInterface jInterface = (JavaInterface)Native.loadLibrary("C:\\EclipseWorkspace\\zzzz.dll",
JavaInterface.class);
lm_cont.ByReference var= new lm_cont.ByReference();
var.id = "45rf67";
var = (lm_cont.ByReference) jInterface.lm_start(var, new lmCallback() {
public int lm_rep(dm_cont test) {
// TODO Auto-generated method stub
return 0;
}
} );
但编译器会出现以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Unsupported argument type LoadLibrary$1 at parameter 1 of function lm_start
at com.sun.jna.Function.convertArgument(Function.java:558)
at com.sun.jna.Function.invoke(Function.java:258)
at com.sun.jna.Library$Handler.invoke(Library.java:218)
at com.sun.proxy.$Proxy0.dm_start(Unknown Source)
我的Java声明有什么问题?很感谢任何形式的帮助。 此外,我上面粘贴的C函数的任何示例JNA代码都非常有用。