JNI 返回结构体参数(3)

2019-04-22 20:49

204. //新建object数组 205. args = (env)->NewObjectArray(len, objClass, 0); 206. 207. /**//* 下面为获取到Java中对应的实例类中的变量*/ 208. 209. //获取Java中的实例类 210. jclass objectClass = (env)->FindClass(\); 211. 212. //获取类中每一个变量的定义 213. //名字 214. jfieldID str = (env)->GetFieldID(objectClass,\,\); 215. //序列号 216. jfieldID ival = (env)->GetFieldID(objectClass,\,\); 217. 218. //给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中 219. for(int i=0; i < len; i++ ) 220. { 221. //给每一个实例的变量付值 222. jstring jstr = WindowsTojstring(env,\我的磁盘名字是 D:\); 223. //(env)->SetObjectField(_obj,str,(env)->NewStringUTF(\ 224. (env)->SetObjectField(_obj,str,jstr); 225. (env)->SetShortField(_obj,ival,10); 226. 227. //添加到objcet数组中 228. (env)->SetObjectArrayElement(args, i, _obj); 229. } 230. //返回object数组 231. return args; 232. 233. } 234. 235. //将jstring类型转换成windows类型 236. char* jstringToWindows( JNIEnv *env, jstring jstr ) 237. { 238. int length = (env)->GetStringLength(jstr ); 239. const jchar* jcstr = (env)->GetStringChars(jstr, 0 ); 240. char* rtn = (char*)malloc( length*2+1 ); 241. int size = 0; 242. size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL ); 243. if( size <= 0 ) 244. return NULL; 245. (env)->ReleaseStringChars(jstr, jcstr ); 246. rtn[size] = 0; 247. return rtn; 248. } 249. //将windows类型转换成jstring类型 250. jstring WindowsTojstring( JNIEnv* env, char* str ) 251. { 252. jstring rtn = 0; 253. int slen = strlen(str); 254. unsigned short * buffer = 0; 255. if( slen == 0 ) 256. rtn = (env)->NewStringUTF(str ); 257. else 258. { 259. int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 ); 260. buffer = (unsigned short *)malloc( length*2 + 1 ); 261. if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 ) 262. rtn = (env)->NewString( (jchar*)buffer, length ); 263. } 264. if( buffer ) 265. free( buffer ); 266. return rtn; 267. } 268. 269. Java 测试native代码 270. 这没有什么多说的,看代码吧 271. //主测试程序 272. public static void main(String[] args) { 273. ChangeMethodFromJni changeJni = new ChangeMethodFromJni(); 274. 275. //输入常用的数值类型(string int boolean) 276. System.out 277. .println(\输入常用的数值类型(string int boolean)-----------\); 278. changeJni.displayParms(\, 100, true); 279. 280. //调用一个静态方法 281. System.out.println(\调用一个静态方法-----------\); 282. int ret = changeJni.add(12, 20); 283. System.out.println(\ + String.valueOf(ret)); 284. 285. //输入一个数组 286. System.out.println(\输入一个数组-----------\); 287. boolean[] blList = new boolean[] { true, false, true }; 288. changeJni.setArray(blList); 289. 290. //返回一个字符串数组 291. System.out.println(\返回一个字符串数组-----------\); 292. String[] strList = changeJni.getStringArray(); 293. for (int i = 0; i < strList.length; i++) { 294. System.out.print(strList[i]); 295. } 296. System.out.println(); 297. 298. System.out.println(\返回一个结构-----------\); 299. 300. //返回一个结构 301. DiskInfo disk = changeJni.getStruct(); 302. System.out.println(\ + disk.name); 303. System.out.println(\ + disk.serial); 304. 305. //返回一个结构数组 306. 307. System.out.println(\返回一个结构数组 -----------\); 308. DiskInfo[] diskList = changeJni.getStructArray(); 309. for (int i = 0; i < diskList.length; i++) { 310. System.out.println(\ + diskList[i].name); 311. System.out.println(\ + diskList[i].serial); 312. } 313. 314. }

转载自:http://hi.http://www.wodefanwen.com//emaer/blog/item/59259d0252650d064afb51cc.html


JNI 返回结构体参数(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:杭州市团务知识学习网 网上自测题及答案(5套,每套100题)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: