Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C+;通过指针返回数据+;使用JNI访问Java 我在C++中有一个函数,它的指针是这里定义的函数参数: get_Message_Tag_Code_(double * pCurrentTag, int * pCurrentCode, char *receiveBuffer, int sizeOfBuffer)_Java_C++_Java Native Interface_Swig - Fatal编程技术网

从C+;通过指针返回数据+;使用JNI访问Java 我在C++中有一个函数,它的指针是这里定义的函数参数: get_Message_Tag_Code_(double * pCurrentTag, int * pCurrentCode, char *receiveBuffer, int sizeOfBuffer)

从C+;通过指针返回数据+;使用JNI访问Java 我在C++中有一个函数,它的指针是这里定义的函数参数: get_Message_Tag_Code_(double * pCurrentTag, int * pCurrentCode, char *receiveBuffer, int sizeOfBuffer),java,c++,java-native-interface,swig,Java,C++,Java Native Interface,Swig,我想在使用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指向的值 谢谢< p>不幸的是,你的C++签名并没有告诉我们指向事物的语义。它们是输入还

我想在使用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指向的值


谢谢

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

对于一般的in-out情况,将参数放入一个结构中,为其创建一个包装器方法,并SWIG包装器(我使用的是std::vector映射,请参阅):

struct MyArgs{
双电流标签;
int-currentCode;
向量缓冲区;
}
获取消息标记代码包装(MyArgs*args){
获取消息标记代码(&args->currentTag,&args->currentCode,&buffer.at(0),buffer.size());
}
诚然,我可能在获取vector::at()的地址时作弊,但我发现它总是生成数组地址。

回答了您当前的问题,但我认为现实情况是您可能更愿意为API的Java用户提供更好的接口。你能多说一点你函数的语义吗?
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());
}