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

标签 java arrays struct callback jna

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

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

这里 arg2 是一个整数数组。 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: Structure field "myfunc" was declared as interface com.sun.jna.win32.StdCallLibrary$StdCallCallback, which is not supported within a Structure,

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

lib.InitKernel(callbacks,5);

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

最佳答案

成功;其他 StdCallCallback 字段有效!

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

关于java - 如何使用 JNA StdCallCallback 接受结构中的 int 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9922993/

相关文章:

java - 无法使用 for 标签来迭代 Pebble 模板引擎中的数组列表

java - 如何在数组中正确打断?

arrays - WebGL 传递数组着色器

python - 如何在 Python 3 中交换两对字节

java - 当我将 Controller 放入嵌套 FXML 文件中时出现 LoadException

java - jsr 303 如何强制它使用我的资源包?

python - 如何合并 JSON 数组和数组

c++ - 在结构中使用模板——制作通用链表

c - 使用 typedef 构建结构 - C

java - 如何在 Eclipse 中安装 Java 6 库的源代码?