2016-04-12 20 views
0

JNA ile Java'da bir C++ kitaplığı kullanmaya çalışıyorum. Kütüphanenin başlık dosyasında Aşağıdaki yöntemi bildirimi sahiptir: geri dizi uzunluğu bilinenJNA ile Java dizisine dönen dizi dizisi (const char **) nasıl eşlenir?

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

ve bu yüzden de tek tek elemanlarının mümkün olan maksimum uzunluktur. Java'da bu işlevi nasıl eşleyebilir ve kullanabilirim? Ben aşağıdaki Java beyanları denedi:

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

Onlar dediğim şu hatayla tüm sonuç foo:

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

(. Bu soru ile ilgili, ancak, aynı değildir this question)

cevap

1

Pointer foo(Pointer bar) istediğiniz ve sonra istediğiniz verileri ayıklamak için Pointer yöntemlerini kullanın.

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

geçersiz bellek erişimi nedeniyle size Aranan beklediği şekilde biçimlendirilmemiş bazı verilerde geçen muhtemeldir.