JNA:指向char **的指针

时间:2015-02-17 19:41:10

标签: java c++ c jna

我拥有下一个C函数:

int fillWithNames(const char*** names, int *n);

我使用JNA转换为java,如下所示:

public interface PlayersLibrary extends Library {
        PlayersLibrary INSTANCE = (PlayersLibrary) Native.loadLibrary("player", PlayersLibrary.class);

int fillWithNames(PointerByReference names, IntByReference n);

}

如何打印此方法在names中返回的字符串?

我想做这样的事情:

PlayersLibrary.INSTANCE.fillWithNames(names, n);

Pointer first = names.getValue(); // char**
String a = first.getPointer(0).getValue() // char*
System.out.println(a);

但在这种情况下,names.getValue()返回null,我不知道该怎么做

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用names.getValue().getStringArray(0, n.getValue()])

我推断n参数告诉被叫方要填写多少个名称。getStringArray()会将内存中的连续指针值转换为字符串,直到遇到{{1}价值;如果你的被叫方没有以NULL指针终止,你需要明确地告诉它有多少指针需要读取(表面上是NULL参数调用n )。

修改

因此长度确实会回到fillWithNames()参数中。如果被调用者将零写入该参数,那么它会告诉您它没有名称(这就是为什么你在另一个参数中得到n的原因)。

答案 1 :(得分:0)

Class PointerByReference

  

表示对指向本机数据的指针的引用。用C表示法,void**

另请参阅SO: PointerByReference not returning value