使用JNI通过指针从C ++返回数据到Java

时间:2016-06-07 13:13:23

标签: java c++ java-native-interface swig

我在C ++中有一个函数,它的指针是函数参数,如下所示:

get_Message_Tag_Code_(double  * pCurrentTag, int * pCurrentCode, char *receiveBuffer, int sizeOfBuffer)

我想在使用JNI的Java代码中使用此函数。 SWIG已经在java中转换了这个函数,如下所示:

get_Message_Tag_Code_(SWIGTYPE_p_double pCurrentTag, SWIGTYPE_p_int pCurrentCode, String receiveBuffer, int sizeOfBuffer)

如何获取SWIGTYPE_p_double和SWIGTYPE_p_int指向的值?

由于

1 个答案:

答案 0 :(得分:0)

不幸的是,你的C ++签名并没有告诉我们指向事物的语义。它们是输入还是输出,或两者兼而有之?

对于一般的in-out情况,将你的参数放入一个struct,为它创建一个包装器方法,然后SWIG包装器(我使用std :: vector mapping,参见swig vector):

struct MyArgs {
    double currentTag;
    int currentCode;
    std::vector<char> buffer;
}
get_Message_Tag_Code_wrap(MyArgs* args) {
    get_Message_Tag_Code_(&args->currentTag, &args->currentCode, &buffer.at(0), buffer.size());
}

不可否认,我可能正在考虑使用vector :: at()的地址,但我发现它总是产生数组地址。