JNA,将C函数指针转换为JNA

时间:2016-11-21 07:00:27

标签: jna

我有C函数,函数指针回调如下

lm_cont* lm_start(lm_cont *context,  int (*lm_rep)(lm_cont))
{
  ....
  .....
}

我正在尝试创建JNA转换

  1. 创建一个回调接口,如下所示

    public interface lmCallback {
        public int lm_rep(lm_cont test);
    }
    
  2. 然后在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;
            }
    
        } );
    
  3. 但编译器会出现以下错误:

    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代码都非常有用。

0 个答案:

没有答案