2016-04-12 9 views
0

JNAでJavaでC++ライブラリを使用しようとしています。私は、次のメソッド宣言を有するライブラリのヘッダファイルに:文字列の配列(const char **)をJNAでJavaに返す関数をマップする方法は?

extern "C" const char** foo(void* bar); 

返される配列の長さが知られており、そのために個々の要素の可能な最大長さであるています。 Javaでこの関数をどのようにマップして使用できますか?私は、次のJava宣言を試してみました:

String[] foo(Pointer bar); 
Pointer foo(Pointer bar); 
StringArray foo(Pointer bar); 

彼ら私が呼んで次のエラーですべての結果foo

Exception in thread "main" java.lang.Error: Invalid memory access

(。この質問はに関連し、しかし、同じされていないthis question

答えて

1

Pointer foo(Pointer bar)は、希望のデータを抽出するためにPointerメソッドを使用します。

Memory data = new Memory(256); 
Pointer p = foo(data); 
Pointer[] parray = p.getPointerArray(0); 
for (Pointer p : parray) { 
    System.out.println(p.getString(0)); 
} 

不正なメモリアクセスが原因あなたが呼び出し先が期待する方法でフォーマットされていないいくつかのデータを渡すには可能性があります。

関連する問題