版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C04_cJNI:必要的优基化於軟硬设整合计觀點( c)By 高煥堂4、Java与C+基於+軟硬对整合象觀點之间的对称关连 举例说明/ CounterNative.java/ .public class CounterNative private int mObject;static System.loadLibrary(MyCounter7);public CounterNative(int numb) nativeSetup( numb );private native void nativeSetup(int n); 当你定义C+类别时,可以将它与JNI的C 函数定义在同一个文件(*.s
2、o)里,也可定义在独立的里。 在此范例里,在JNI的C函数文件中,新增一个CCounter类。 例如,在com_misoo_counter_CounterNative.cpp 里除了实作本地C函数之外,还定义了一个C+的CCounter类。/* com.misoo.counter.CounterNative.cpp */#include com_misoo_counter_actNative.h#include com_misoo_counter_CounterNative.h“classCCounter i nt n;public:CCounter(int v) n = v; int exe
3、cute() int i, sum = 0;for(i=0; iGetObjectClass(thiz);jfieldID fid = (jfieldID)env-GetFieldID(clazz, mObject, I); env-SetIntField(thiz, fid, (jint)obj);JNIEXPORT jint JNICALLJava_com_misoo_counter_actNative_nativeExec (JNIEnv *env, jclass clazz, jobject obj) jclass objClazz = (jclass)env-GetObjectCla
4、ss(obj); jfieldID fid = env-GetFieldID(objClazz, mObject, I); jlong p = (jlong)env-GetObjectField(obj, fid); CCounter *co = (CCounter*)p;return (jint)co-execute(); 上述nativeSetup()函数里的指令:CCounter *obj = new CCounter(n); 创建一个C+层的CCounter对象,并且把n值存入其中。 随后,指令:jclass clazz = (jclass)env-GetObjectClass(thi
5、z); jfieldID fid =(jfieldID)env-GetFieldID(clazz, mObject, I); 取得该CCounter对象的mObject属性ID。 接着,指令:env-SetIntField(thiz, fid, (jint)obj); 就将CCounter对象的指针值储存于CounterNative对象的mObject属性里,如此建立了CounterNative对象与CCounter 对象之连结。CounterNative 对象 1CounterNative 对象 nmObjectmObjectCCounter 对象1CCounter 对象 nJNI Modu
6、lenativeSetup(n: int) nativeExec(obj: Object) C模块创建CCounter对象之后,立即将CCounter对象指针储存于CounterNative 的mObject属性里。 C模块来创建C+对象,然后让Java对象与C+对象之间产生成双成对的连结关系。 C模块本身并不储存Java或C+对象的指针或参考值。而是仅负责创建C+对象,并建立Java与C+的对象间的连结关系。 如此,C模块能替众多Java对象服务,而不再与特定的Java对象绑在一起了。 一旦解开C模块与C+对象(或Java对象)之间的相依性,C模块就能具有通用性。 例如,C层nativeSe
7、tup()函数,能为Java层的每一个对象建立其相对映的C+对象。 由于C层的nativeSetup()已经变成为通用型的函数了,每次调用它时,只要将特定的CounterNative对象传递给它,就能顺利找到其相对映的CCounter对象了。如下图:/ actNative.java/ public class actNative public static native int nativeExec(Object obj); 这nativeExec()先取得CounterNative对象里的mObject属性值,相当于取得CCounter对象的指针了,就能调用CCounter对象的execut
8、e()函数了。 由于C模块里并没有储存CounterNative对象的指针,所以Java必须将CounterNative 对象的参考值传递给JNI层的nativeExec() 本地函数,如下指令: 编修ac01.java类别:/ ac01.java/ .public class ac01 extends Activity implements OnClickListener private CounterNative cn1, cn2;Override public void onCreate(Bundle savedInstanceState)/.cn1 = new CounterNativ
9、e(10); cn2 = new CounterNative(12); ac01.java类:Override public void onClick(View v) int sum;switch(v.getId()case 101:sum = actNative.nativeExec(cn1); setTitle(Sum = + sum);break;case 102:sum = actNative.nativeExec(cn2); setTitle(Sum = + sum);break; case 103:finish();break; 指令:actNative.nativeExec( c
10、n1 ); 此时,ac01将CounterNative类别的第1个对象传递给JNI模块的nativeExec()函数, 找到相对映的CCounter对象,然后调用它的execute()函数。 这obj参考到CounterNative对象。JNIEXPORT jint JNICALLJava_com_misoo_counter_actNative_nativeExec (JNIEnv *env, jclass clazz, jobject obj) jclass objClazz = (jclass)env-GetObjectClass(obj); jfieldID fid = env-GetFieldID(objClazz, mObject, I); jlong p = (jlong)env-GetObjectField(obj, fid); CCounter *co = (CCounter*)p;return (jint)co-execute(); 当其执行到指令:jfieldID fid = env-GetFieldID(objCla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年四川中医药高等专科学校单招职业适应性测试题库参考答案详解
- 2026年哈尔滨科学技术职业学院单招职业适应性考试题库及参考答案详解1套
- 2026年娄底职业技术学院单招职业技能测试题库含答案详解
- 2026年合肥信息技术职业学院单招职业适应性测试题库及答案详解一套
- 2026年青海省海西蒙古族藏族自治州单招职业倾向性测试题库及参考答案详解1套
- 护士妇幼面试题目及答案
- 2022年7月国开电大行管专科《监督学》期末纸质考试试题及答案
- 2025年毕节市“优师计划”毕业生专项招聘306人备考题库及完整答案详解一套
- 2025年中国社会科学院文化发展促进中心年鉴与院史工作部非事业编制人员招聘备考题库及答案详解参考
- 2025年浙江中医药大学临床医学院及直属附属医院公开招聘277人备考题库含答案详解
- 施工现场防火措施技术方案
- 2025年高职物理(电磁学基础)试题及答案
- 政银合作融资模式-洞察与解读
- 服装打版制作合同范本
- 购油茶苗合同
- 技术部门项目交付验收流程与标准
- 林场管护知识培训课件
- 小学语文经典课文说课稿集锦(三年级适用)
- 2025年江苏事业单位笔试真题及答案(完整版)
- 公司反贪腐类培训课件
- 寝室内务规范讲解
评论
0/150
提交评论