我一直在忙于在x264.dll周围创建JNA包装器。我有以下我的X264_PARAM__T的课程:

http://pastebin.com/mh4jkvpp

但是,当我尝试初始化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的数组,或者只是从内部结构中转移所有变量,而不是使用单独的类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top