完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
JNI中类的传递
上面说了一大篇,正篇我们马上开始。 首先创建我们要传递的类 public class CProduct { public CProduct() { incod; fnam; price=0; qty=0; } //商品编码 public String incode; //商品名称 public String fname; //价格 public float price; //数量 public int qty; } 从JNI中得到返回类的信息 我们在VaccaeJNI的类中加入一个静态方法getproduct; //获取产品信息 public native static CProduct getproduct(); 然后按ALT+ENTER让其在native-lib.cpp中自动生成对应的方法 生成返回类的步骤: 用FindClass获取到我们的CProduct类 用GetFieldID来定义类CProduct里面的属性信息 实例化我们的类 通过SetXXXXXField的方法全各个属性赋值 返回类信息 extern “C” JNIEXPORT jobject JNICALL Java_dem_vac_vaccaendk_VaccaeJNI_getproduct(JNIEnv *env, jclass type) { //首先获取class jclass jcls = env-》FindClass(“dem/vac/vaccaendk/CProduct”); if (jcls == NULL) { return 0; } //定义类里面的属性 jfieldID incode = env-》GetFieldID(jcls, “incode”, “Ljava/lang/String;”); jfieldID fname = env-》GetFieldID(jcls, “fname”, “Ljava/lang/String;”); jfieldID price = env-》GetFieldID(jcls, “price”, “F”); jfieldID qty = env-》GetFieldID(jcls, “qty”, “I”); //首先实例化类 jobject jobj = env-》AllocObject(jcls); //然后对类中的各属性赋值 //商品编码 env-》SetObjectField(jobj, incode, env-》NewStringUTF(“000001”)); //商品名称 env-》SetObjectField(jobj, fname, env-》NewStringUTF(“康师傅方便面”)); //价格 env-》SetFloatField(jobj, price, 6.5); //数量 env-》SetIntField(jobj, qty, 10); //输出 return jobj; } 然后我们在按钮事件里面写入调用的这个方法并显示出来 看一下运行效果 |
|
|
|
只有小组成员才能发言,加入小组>>
923浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 11:51 , Processed in 0.904547 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号