我正在使用 JNA 为 C ++ 编写的DLL编写Java接口,以控制小型设备。
在翻译数据类型时,我遇到了
const char*** someVariable
有人可以向我解释这意味着什么以及如何在Java中重新创建?
我已阅读指针,我正在使用JNA文档将C ++类型映射到Java,但我找不到对末尾有三个星号的类型的引用。
这应该被解释为指向String数组的指针吗?
答案 0 :(得分:5)
如果你知道指针的概念,
const char ***意味着它是一个三重指针,所以你可以这样想:
const char***--->const char**--->const char*--->const char
所以是的,它可以解释为指向字符串数组的指针,因为字符串数组可以解释为双指针。
让我们说a
是一个字符串数组:
const char *a[15];
在这种情况下,**a
将为您提供第一个字符串的第一个字符。
你可以声明:
const char ***b = &a;
在这种情况下***b
将为您提供第一个字符串的第一个字符。
答案 1 :(得分:3)
大多数可能的解释是你应该传入一个指针的地址,并且在返回时,指针将是一个C字符串数组。
这不是唯一可能的解释,但可能是最可能的解释。如果本机签名还要求指向整数的指针,它将写入返回数组的长度,则尤其如此。
要在JNA中使用它:
PointerByReference pref = new PointerByReference();
IntegerByReference iref = new IntegerByReference();
nativeLib.call(pref, iref);
String[] strings = pref.getValue().getStringArray(0, iref.getValue());
如果未指定长度,JNA将查找标记字符串数组末尾的NULL值。