我有一个问题。我首先需要了解如何传递“ String [] contentsStatic”。我可以在JNA文档中看到String []应该映射到Char **。我不确定如何在Java方面将此映射。在我的特定实现中,我甚至不确定这是否会真正起作用,因为我要使用的C代码是MatLab,因此在C代码中,它期望的是'const emxArray_char_T * contentsStatic。我不知道这是什么。
这是C面:
Initialise(const emxArray_char_T *contentsStatic, const
emxArray_char_T *contentsDynamic, int b_phoneAngleDeg, double
b_stepCalibrationOffset, int b_initialFloorNumber, int
b_initialPointingAngleDeg, int b_initialAlignmentMode, bool *mapStatus, bool
*paramStatus);
Java方面是:
initialise(String[] contentsStatic,
String[] contentsDynamic,
int phoneRelativeToBodyDegree,
double initialStepCalibrationOffset,
int startingFloorID,
LatLng startingLatLong,
double startingAccuracy,
boolean _CDontActuallyUse,
int phoneOrientation,
int phoneOrientationUse,
boolean magntometerValid
)
您正在询问如何传递String[]
,但这不是本机功能所期望的。
查看Matlab文档,emxArray_char_T
是一个结构:
struct emxArray_char_T
{
char * str;
int size;
};
所以您应该在JNA中定义此结构:
@FieldOrder ({"str", "size"})
class emxArray_char_T extends Structure {
public String str;
public int size;
// Optional: add constructor to set str to the string param
// and size to its length
}