JNI传递字符串数组J-StringArray
编译器对语言的转换以寻地址的方式进行序列化和反序列化,因此对于不固定类型或者不显示给出大小的对象不能直接解析,所以没有出现jstringArray这样的类型,只能一个一个编写。
参考链接:安卓开发提高篇-Jarray
1.使用的C++函数
//调用标定相机的函数!wishchin !!!
int CFrameProcess::CamCabPro(std::vector<std::string> &filenames,Mat &intrinsic_Mat, Mat &disCoeff,Mat &object_points, Mat &axis)
{vector<Mat> inputFrames;for (int i=0;i< filenames.size();++i){Mat t = cv::imread(filenames[i].c_str(),1);inputFrames.push_back(t);}camCalib myCamCalib;MyCamera cam;bool isDetected = myCamCalib.cameraCab(inputFrames , cam);intrinsic_Mat = cam.intrinsic_Mat.clone() ;disCoeff = cam.disCoeff.clone() ;object_points = cam.object_pointsM.clone() ;axis = cam.axisM.clone() ;return isDetected;
}
2.JNI接口函数
extern "C" jint
Java_com_example_feeljulygpsmap_FeelJulyActivity_trackInitParamS
(JNIEnv *jenv, jclass,jobject thiz,jstring file0,jstring file1,jstring file2,jstring file3,jstring file4,jstring file5,jstring file6,jstring file7,jstring file8,jstring file9,jstring file10,jlong intrinsic_Mat,jlong disCoeff,jlong object_pointsM ,jlong axisM
)
{std::vector<std::string> filenames(11);string stdFileName="";jStr2StdStr(jenv, file0,stdFileName);filenames[0]=stdFileName;jStr2StdStr(jenv, file1,stdFileName);filenames[1]=stdFileName;jStr2StdStr(jenv, file2,stdFileName);filenames[2]=stdFileName;jStr2StdStr(jenv, file3,stdFileName);filenames[3]=stdFileName;jStr2StdStr(jenv, file4,stdFileName);filenames[4]=stdFileName;jStr2StdStr(jenv, file5,stdFileName);filenames[5]=stdFileName;jStr2StdStr(jenv, file0,stdFileName);filenames[6]=stdFileName;jStr2StdStr(jenv, file7,stdFileName);filenames[7]=stdFileName;jStr2StdStr(jenv, file8,stdFileName);filenames[8]=stdFileName;jStr2StdStr(jenv, file9,stdFileName);filenames[9]=stdFileName;jStr2StdStr(jenv, file10,stdFileName);filenames[10]=stdFileName;((CFrameProcess*)thiz)->CamCabPro(filenames,*((Mat*)intrinsic_Mat) , *((Mat*)disCoeff) ,*((Mat*)object_pointsM) , *((Mat*)axisM) );return 1;
}
转换函数:
inline void jStr2StdStr(JNIEnv *jenv, jstring SSrc,std::string SDst)
{const char* jnamestr = jenv->GetStringUTFChars(SSrc, NULL);string stdFileName(jnamestr);SDst =stdFileName;}
3.Java层的定义和调用
调用:
@SuppressLint("SdCardPath")private int trackInitParamJ(CamParam mCamParam,Vector<String> filenames){//使用java初始化,读取文件!//trackInitParam(mCamParam);filenames.add(0,"/sdcard/DevCv/Picture/209.jpg");filenames.add(1,"/sdcard/DevCv/Picture/240.jpg");filenames.add(2,"/sdcard/DevCv/Picture/287.jpg");filenames.add(3,"/sdcard/DevCv/Picture/300.jpg");filenames.add(4,"/sdcard/DevCv/Picture/339.jpg");filenames.add(5,"/sdcard/DevCv/Picture/356.jpg");filenames.add(6,"/sdcard/DevCv/Picture/371.jpg");filenames.add(7,"/sdcard/DevCv/Picture/404.jpg");filenames.add(8,"/sdcard/DevCv/Picture/414.jpg");filenames.add(9,"/sdcard/DevCv/Picture/743.jpg");filenames.add(10,"/sdcard/DevCv/Picture/761.jpg");trackInitParamS(mNativeObjCvT,filenames.get(0),filenames.get(1),filenames.get(2),filenames.get(3),filenames.get(4),filenames.get(5),filenames.get(6),filenames.get(7),filenames.get(8),filenames.get(9),filenames.get(10),mCamParam.intrinsic_Mat.getNativeObjAddr(),mCamParam.disCoeff.getNativeObjAddr(),mCamParam.object_pointsM.getNativeObjAddr() ,(mCamParam.axisM).getNativeObjAddr());return 1;}
定义:
private static native long trackInitParamS(long thiz,String file0,String file1,String file2,String file3,String file4,String file5,String file6,String file7,String file8,String file9,String file10,long intrinsic_Mat, long disCoeff, long object_pointsM , long axisM );
JNI传递字符串数组J-StringArray相关推荐
- c语言解析字符串报文,传递字符串数组报文和解析
1 .项目中,难免遇到两个系统平台数据的交互,此时就需要通过接口来完成了: 2.WebService 基于 HTTP 通信,它跨平台,使得易购平台能无缝衔接,将应用程序的逻辑和数据暴露,使得其他应用系 ...
- C++ 传递字符串数组给函数参数
C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址. 对于传入字符串数组同理,所以如果在函数中对传入的字符串数组进行改变,函数外的字符串数组也会同时改变 举个简单的例子: voi ...
- jni 传递字符串到java_Android JNI开发-java与c++其间的中文字符串传递
Android JNI开发---java与c++之间的中文字符串传递 最近在做一个Android电子词典,其中在从词库中读取词条时,用到了jni---java调用c++;在java代码里调用本地方法时 ...
- java c 传递字符串数组_JNI传递字符串数组J-StringArray
编译器对语言的转换以寻地址的方式进行序列化和反序列化,因此对于不固定类型或者不显示给出大小的对象不能直接解析,所以没有出现jstringArray这样的类型,只能一个一个编写. 1.使用的C++函数 ...
- java 传递字符串数组_将数组中字符串的值传递给java中的方法?
参见英文答案 > How do I compare strings in Java? 23个 感谢您抽出时间来阅读.对不起, ...
- java 传参字符串数组_JAVA语言之okhttp传递数组参数
比较以上两种格式,发现格式不对.传给后台时,总是报参数错误的异常. 解决办法:定义一个对象继承自okhttp3.RequestBody public class DefaultRequestBody ...
- python ctypes库5_如何传递一个字符串数组
直接上代码: struct struct_str_arr { char* str_ptr[1000]; }; struct_str_arr str_ ...
- 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )
文章目录 I . C/C++ 中的 Java 字符串数组类型 II . 获取字符串数组长度 III . 获取字符串数组元素 IV . 类型强转 ( jobject -> jstring ) V ...
- Java层与Jni层的数组传递(转)
源:Java层与Jni层的数组传递 Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的S ...
最新文章
- 超图桌面开发VC++ 入门程序
- axis2 jar包冲突_一个jar包冲突引起的StackOverflowError
- Tornado使用mako 模板总结
- 【简洁易懂】Filter的四种拦截方式
- linux bash命令找不到,Linux下提示命令找不到:bash:command not found
- 使用Google Guava创建收藏和实现不变性
- 书写README的各种markdown语法
- HDU - 1525
- 显示部分x_i5 9400F+GTX 1030+23.8英寸,攀升迁跃者X上手简评
- 用exp无法导出空表解决方法/用exp导出数据时表丢失原因
- 退出Activity
- 特征工程之特征选择(4)----嵌入法(Embed)
- 图像处理珍藏版本汇总
- 计算机网络——模拟信号(四)
- 不支持:http://javax.xml.XMLConstants/property/accessExternalStylesheet
- Summer Project
- 多文件批量下载打包成.zip
- sqli-lab教程Less-5
- 短信平台被恶意攻击怎么防御
- 阴阳师手游初始式神推荐
热门文章
- css文字换行问题white-space:pre-line或者white-space:pre-wrap,解决word-wrap:break-word解决不了的...
- 1069: [SCOI2007]最大土地面积|旋转卡壳
- SFB 项目经验-02-共存迁移-Lync 2013-TO-SFB 2015-规划02
- mssql查询所有上下级
- Exchange 2013 OWA重定向
- Tomcat 详解 一
- windowsXPsp3怎样恢复桌面IE图标(非快捷方式)
- Design Patterns之Adapter Pattern总结
- 8/100. Find All Numbers Disappeared in an Array
- Js 模拟鼠标点击事件