我一直在忙于围绕x2​​64.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和Analyze)以相同的方式嵌套。但是,以某种方式,JNA无法找到Vui所需的大小。有指针吗?

编辑:
似乎所有其他嵌套结构(analyse和rc)也未初始化。我想知道为什么?

最佳答案

无需注释掉Vui,而是将其替换为Pointer,然后检查是否填充了其他两个结构。

这些结构被定义为x264_param_t结构中的内部结构,也许JNA对此有问题。仔细查看x264_param_t.toString()的输出,因为它会输出计算出的内存偏移量。

希望您能在jna mailing list上找到更好的答案

编辑一个肮脏的技巧来解决这个问题:使用一个int数组或只是从内部结构中转储所有变量,而不是使用一个单独的类。

关于java - 带JNA的x264编码器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4737298/

10-12 13:36