1

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 と Analyze )があるため、このネストされた構造と正確に何が違うのだろうか。しかし、どういうわけか、JNA は Vui に必要なサイズを見つけることができません。ポインタはありますか?

編集:他のすべてのネストされた構造体 (analyse および rc ) も初期化されていないようです。なぜだろう?

4

1 に答える 1

1

Vui をコメント アウトする代わりに、Pointer に置き換えて、他の 2 つの構造が満たされているかどうかを確認します。

これらの構造体は、x264_param_t 構造体内の内部構造体として定義されています。JNA に問題がある可能性があります。x264_param_t.toString() の出力を詳しく見てみましょう。計算されたメモリ オフセットが出力されます。

jnaメーリングリストでより良い答えが見つかることを願っています

編集問題を解決するための汚いハック: int の配列を使用するか、別のクラスを使用する代わりに内部構造体からすべての変数をダンプします。

于 2011-01-19T17:36:30.047 に答える