【发布时间】:2015-02-17 19:41:09
【问题描述】:
我拥有下一个 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,我不知道该怎么办
我能做些什么来解决这个问题?
【问题讨论】:
-
在编写一行 Java 之前,您是否能够通过从 C++ 调用它来使您的函数工作?还是C?我问这个,因为“三星级”编程很容易出错,更不用说尝试将 Java 与这样的东西接口了。
-
你好@PaulMcKenzie,是的,我已经检查过该函数在 C++ 中是否有效。这是我拥有的遗留库
-
如果你从
Pointer.getValue()得到一个null值,这意味着被调用者从未写过你给它的空间。也许你应该给它n参数的整数地址,以便它可以告诉你它填充了多少?包括初始化names和n的代码。