如何在结构中使用接受int数组的JNA StdCallCallback?

时间:2012-03-29 09:52:48

标签: java arrays struct callback jna

让我们考虑一下,我们需要将结构化形式的回调传递给本机代码dll。 其中一个回调在C表示法中具有以下形式:

int myfunc (int arg1,int* arg2,int arg3,int arg4);//it is marked as stdcall in real app

这里arg2是一个int数组。 arg1确定arg2中的元素数。

这是Java代码:

 public class TRCallbackCollection extends Structure{
       public int fieldsCount;    
       public StdCallLibrary.StdCallCallback myfunc;
//...
    }
//...
TRCallbackCollection callbacks= new   TRCallbackCollection();
callbacks.fieldsCount = 7;       
callbacks.myfunc = new StdCallLibrary.StdCallCallback(){
 public int callback (int arg1, int[] arg2,int arg3,int arg4) {            
  return 0;
 }
};

我遇到了以下错误:

  

java.lang.IllegalArgumentException:结构字段“myfunc”是   声明为接口   com.sun.jna.win32.StdCallLibrary $ StdCallCallback,不是   在结构中支持,

当我尝试使用TRCallbackCollection结构的实例初始化本机dll时:

lib.InitKernel(callbacks,5);

其他回调工作正常。我认为问题与方法中的int[] arg2有关。我应该如何转换它并在回调中用作数组?

1 个答案:

答案 0 :(得分:1)

成功;其他StdCallCallback字段有效!

幸运的是,我已经解决了这个问题。我使用Pointer arg2代替int[] arg2