2011-01-19 60 views
1

我一直在圍繞x264.dll創建一個JNA包裝器。我有我的x264_param_t以下類:x264編碼器與JNA

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,實例化是可以的。我不知道這個嵌套結構有什麼不同,因爲有兩個嵌套的結構(即Rc和Analyze)。但是,不知何故,JNA無法爲Vui找到所需的尺寸。任何指針?

編輯: 似乎所有其他嵌套結構(分析和rc)也未初始化。我想知道爲什麼?

+0

爲什麼你不考慮JNI?您可以閱讀我的指南[這裏](http://livertmpjavapublisher.blogspot.com/2014/05/jni-for-x264-encoder.html)。 – 2014-05-17 09:59:48

回答

1

而不是註釋掉Vui,用指針代替它,並檢查其他兩個結構是否被填充。

這些結構被定義爲x264_param_t結構中的內部結構,也許JNA有問題。仔細查看x264_param_t.toString()的輸出,因爲它會打印計算出的內存偏移量。

我希望你能在JNA mailing list

編輯一個骯髒的黑客來解決這個問題找到更好的答案:使用int數組或只轉儲而不是使用一個單獨的從內部結構的所有變量類。

+0

jna郵件列表當然是我立即選擇尋求幫助。但是,它似乎又回到了吞食電子郵件。更多關於我的問題,似乎jna已經知道(蒂莫西)的行爲不會自動爲嵌套的ByValue結構分配內存。如果足夠的開發人員要求解決問題,他會如何解決問題,我不確定他是否會執行該問題。在最新的jna更新日誌中沒有提到這樣的修復,但是我可能再次犯錯了 – 2011-01-19 21:41:59