从C+;通过指针返回数据+;使用JNI访问Java 我在C++中有一个函数,它的指针是这里定义的函数参数: get_Message_Tag_Code_(double * pCurrentTag, int * pCurrentCode, char *receiveBuffer, int sizeOfBuffer)
我想在使用JNI的Java代码中使用这个函数。 SWIG已在java中转换此函数,如下所示:从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++签名并没有告诉我们指向事物的语义。它们是输入还
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());
}