题
我一直在忙于在x264.dll周围创建JNA包装器。我有以下我的X264_PARAM__T的课程:
但是,当我尝试初始化x264_param_t时
x264_param_t param_t = new x264_param_t;
我收到以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Can't determine size of nested structure: Can't instantiate class anotherReversed.x264_param_t$Vui (java.lang.InstantiationException: anotherReversed.x264_param_t$Vui)
at com.sun.jna.Structure.calculateSize(Structure.java:790)
at com.sun.jna.Structure.allocateMemory(Structure.java:287)
at com.sun.jna.Structure.<init>(Structure.java:177)
at com.sun.jna.Structure.<init>(Structure.java:167)
at com.sun.jna.Structure.<init>(Structure.java:163)
at com.sun.jna.Structure.<init>(Structure.java:154)
at anotherReversed.x264_param_t.<init>(x264_param_t.java:7)
如果我在其父级构造函数中评论VUI,则可以实例化。我想知道与此嵌套结构完全不同,因为还有两个以相同方式嵌套的其他2个(即RC和分析)。但是,以某种方式,JNA无法找到VUI所需的尺寸。有指针吗?
编辑:似乎所有其他嵌套结构(分析和RC)也没有初始化。我想知道为什么?
解决方案
与其注释VUI,不如用指针替换它,并检查其他两个结构是否填充。
这些结构被定义为X264_Param_T结构内的内部结构,JNA也许有问题。仔细观察x264_param_t.tostring()的输出,因为它打印了计算的内存偏移。
希望您能在JNA找到更好的答案 邮件列表
编辑 解决问题的肮脏hack:使用int的数组,或者只是从内部结构中转移所有变量,而不是使用单独的类。
不隶属于 StackOverflow