3

私は午前中の大部分を、JNA を使用して Java から C++ に値を設定し、値を設定した構造体の配列を渡そうとしました。私は JNA ベースのコードの大部分を実行しており、これは単純であるべきだと思いますが、@deprecated 関数を使用していない例を見つけたり見つけたりすることができません。私の疑いでは、これは些細なことであり、誰かが私を示したときに私はばかげていると感じるでしょうが、私は本当に助けていただければ幸いです.

私が試したことについてのちょっとした背景: どういうわけかそれが問題ではないかと疑っていますが、手動でインターフェース ファイルを作成する方法 (およびそれらを機能させる方法) を学んだ後、JNAerator に切り替えました。JNAerator の翻訳

MyStruct* mine

MyStruct mine

Javaで。Java では、これは単一のオブジェクトを指すためにしか使用できなかったので、これは少し混乱します。ある時点で、私は

MyStruct** mine

に変換されます

PointerByReference mine

しかし、構造体を変更したり、構造体に再度アクセスしたりする必要がないため、これはやり過ぎのように思えます。この時点から考えられることはすべて試しましたが、最初の構造体以上のものを送信することに成功したことはありません。

4

1 に答える 1

0

質問を読み直した後 (Java から C++ に構造を渡す)、次のことができます。

// Assuming a native signature like this:
// call_native_function(MyStruct** struct_list, int count)

MyStruct.ByReference[] list = new MyStruct.ByReference[SIZE];
for (int i=0;i < list.length;i++) {
    list[i] = new MyStruct.ByReference();
    // Initialize the struct as needed
}
// Call whatever native method...
nativeLibrary.call_native_function(list, list.length);

JNA FAQも参照してください。

于 2013-01-18T20:21:32.883 に答える