编译器对语言的转换以寻地址的方式进行序列化和反序列化,因此对于不固定类型或者不显示给出大小的对象不能直接解析,所以没有出现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相关推荐

  1. c语言解析字符串报文,传递字符串数组报文和解析

    1 .项目中,难免遇到两个系统平台数据的交互,此时就需要通过接口来完成了: 2.WebService 基于 HTTP 通信,它跨平台,使得易购平台能无缝衔接,将应用程序的逻辑和数据暴露,使得其他应用系 ...

  2. C++ 传递字符串数组给函数参数

    C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址. 对于传入字符串数组同理,所以如果在函数中对传入的字符串数组进行改变,函数外的字符串数组也会同时改变 举个简单的例子: voi ...

  3. jni 传递字符串到java_Android JNI开发-java与c++其间的中文字符串传递

    Android JNI开发---java与c++之间的中文字符串传递 最近在做一个Android电子词典,其中在从词库中读取词条时,用到了jni---java调用c++;在java代码里调用本地方法时 ...

  4. java c 传递字符串数组_JNI传递字符串数组J-StringArray

    编译器对语言的转换以寻地址的方式进行序列化和反序列化,因此对于不固定类型或者不显示给出大小的对象不能直接解析,所以没有出现jstringArray这样的类型,只能一个一个编写. 1.使用的C++函数 ...

  5. java 传递字符串数组_将数组中字符串的值传递给java中的方法?

    参见英文答案 > How do I compare strings in Java?                                    23个 感谢您抽出时间来阅读.对不起, ...

  6. java 传参字符串数组_JAVA语言之okhttp传递数组参数

    比较以上两种格式,发现格式不对.传给后台时,总是报参数错误的异常. 解决办法:定义一个对象继承自okhttp3.RequestBody public class DefaultRequestBody  ...

  7. python ctypes库5_如何传递一个字符串数组

    直接上代码: struct struct_str_arr     {         char* str_ptr[1000];     };           struct_str_arr str_ ...

  8. 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )

    文章目录 I . C/C++ 中的 Java 字符串数组类型 II . 获取字符串数组长度 III . 获取字符串数组元素 IV . 类型强转 ( jobject -> jstring ) V ...

  9. Java层与Jni层的数组传递(转)

    源:Java层与Jni层的数组传递 Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的S ...

最新文章

  1. 超图桌面开发VC++ 入门程序
  2. axis2 jar包冲突_一个jar包冲突引起的StackOverflowError
  3. Tornado使用mako 模板总结
  4. 【简洁易懂】Filter的四种拦截方式
  5. linux bash命令找不到,Linux下提示命令找不到:bash:command not found
  6. 使用Google Guava创建收藏和实现不变性
  7. 书写README的各种markdown语法
  8. HDU - 1525
  9. 显示部分x_i5 9400F+GTX 1030+23.8英寸,攀升迁跃者X上手简评
  10. 用exp无法导出空表解决方法/用exp导出数据时表丢失原因
  11. 退出Activity
  12. 特征工程之特征选择(4)----嵌入法(Embed)
  13. 图像处理珍藏版本汇总
  14. 计算机网络——模拟信号(四)
  15. 不支持:http://javax.xml.XMLConstants/property/accessExternalStylesheet
  16. Summer Project
  17. 多文件批量下载打包成.zip
  18. sqli-lab教程Less-5
  19. 短信平台被恶意攻击怎么防御
  20. 阴阳师手游初始式神推荐

热门文章

  1. css文字换行问题white-space:pre-line或者white-space:pre-wrap,解决word-wrap:break-word解决不了的...
  2. 1069: [SCOI2007]最大土地面积|旋转卡壳
  3. SFB 项目经验-02-共存迁移-Lync 2013-TO-SFB 2015-规划02
  4. mssql查询所有上下级
  5. Exchange 2013 OWA重定向
  6. Tomcat 详解 一
  7. windowsXPsp3怎样恢复桌面IE图标(非快捷方式)
  8. Design Patterns之Adapter Pattern总结
  9. 8/100. Find All Numbers Disappeared in an Array
  10. Js 模拟鼠标点击事件