JNA如何将String []从Java传递到C代码

问题描述 投票:0回答:1

我有一个问题。我首先需要了解如何传递“ 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
                                )
java android java-native-interface jna
1个回答
0
投票

您正在询问如何传递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
}
© www.soinside.com 2019 - 2024. All rights reserved.