免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Jni实例步骤 1:编写 Java 代码public class Sample1 public native int intMethod(int n);public native boolean booleanMethod(boolean bool);public native String stringMethod(String text);public native int intArrayMethod(int intArray);public static void main(String args) System.loadLibrary(Sample1);Sample1 sample = new Sample1();int square = Method(5);boolean bool = sample.booleanMethod(true);String text = sample.stringMethod(JAVA);int sum = ArrayMethod(new int 1, 1, 2, 3, 5, 8, 13 );System.out.println(intMethod: + square);System.out.println(booleanMethod: + bool);System.out.println(stringMethod: + text);System.out.println(intArrayMethod: + sum);步骤 2:编译 Java 代码接下来,我们需要将 Java 代码编译成字节码。完成这一步的方法之一是使用随 SDK 一起提供的 Java 编译器 javac。用来将 Java 代码编译成字节码的命令是:C:eclipseworkspaceIBMJNIsrccomibmcoursejnijavac Sample1.java步骤 3:创建 C/C+ 头文件第三步是创建 C/C+ 头文件,它定义本机函数说明。完成这一步的方法之一是使用 javah.exe,它是随 SDK 一起提供的本机方法 C 存根生成器工具。这个工具被设计成用来创建头文件,该头文件为在 Java 源代码文件中所找到的每个 native 方法定义 C 风格的函数。这里使用的命令是:C:eclipseworkspaceIBMJNIbinjavah classpath ./ jni com.ibm.course.jni.Sample1步骤 4:编写 C/C+ 代码当谈到编写 C/C+ 函数实现时,有一点需要牢记:说明必须和 Sample1.h 的函数声明完全一样。我们将研究用于 C 实现和 C+ 实现的完整代码,然后讨论两者之间的差异。C函数实现以下是 Sample1.c,它是用 C 编写的实现:#include com_ibm_course_jni_Sample1.h #include JNIEXPORT jint JNICALL Java_com_ibm_course_jni_Sample1_intMethod(JNIEnv *env, jobject obj, jint num) return num * num;JNIEXPORT jboolean JNICALL Java_com_ibm_course_jni_Sample1_booleanMethod(JNIEnv *env, jobject obj, jboolean boolean) return !boolean;JNIEXPORT jstring JNICALL Java_com_ibm_course_jni_Sample1_stringMethod(JNIEnv *env, jobject obj, jstring string) const char *str = (*env)-GetStringUTFChars(env, string, 0);char cap128;strcpy(cap, str);(*env)-ReleaseStringUTFChars(env, string, str);return (*env)-NewStringUTF(env, strupr(cap);JNIEXPORT jint JNICALL Java_com_ibm_course_jni_Sample1_intArrayMethod(JNIEnv *env, jobject obj, jintArray array) int i, sum = 0;jsize len = (*env)-GetArrayLength(env, array);jint *body = (*env)-GetIntArrayElements(env, array, 0);for (i=0; i sum += bodyi;(*env)-ReleaseIntArrayElements(env, array, body, 0);return sum;C+ 函数实现以下是 Sample1.cpp(C+ 实现)#include com_ibm_course_jni_Sample1.h#includeJNIEXPORT jint JNICALL Java_Sample1_intMethod(JNIEnv *env, jobject obj, jint num) return num * num;JNIEXPORT jboolean JNICALL Java_Sample1_booleanMethod(JNIEnv *env, jobject obj, jboolean boolean) return !boolean;JNIEXPORT jstring JNICALL Java_Sample1_stringMethod(JNIEnv *env, jobject obj, jstring string) const char *str = env-GetStringUTFChars(string, 0);char cap128;strcpy(cap, str);env-ReleaseStringUTFChars(string, str);return env-NewStringUTF(strupr(cap);JNIEXPORT jint JNICALL Java_Sample1_intArrayMethod(JNIEnv *env, jobject obj, jintArray array) int i, sum = 0;jsize len = env-GetArrayLength(array);jint *body = env-GetIntArrayElements(array, 0);for (i=0; i sum += bodyi;env-ReleaseIntArrayElements(array, body, 0);return sum;C 和 C+ 函数实现的比较唯一的差异在于用来访问 JNI 函数的方法。在 C 中,JNI 函数调用由“(*env)-”作前缀,目的是为了取出函数指针所引用的值。在 C+ 中,JNIEnv 类拥有处理函数指针查找的内联成员函数。下面将说明这个细微的差异,其中,这两行代码访问同一函数,但每种语言都有各自的语法。C 语法:jsize len = (*env)-GetArrayLength(env,array);C+ 语法:jsize len =env-GetArrayLength(array);步骤 5:创建共享库文件接下来,我们创建包含本机代码的共享库文件。大多数 C 和 C+ 编译器除了可以创建机器代码可执行文件以外,也可以创建共享库文件。用来创建共享库文件的命令取决于您使用的编译器。下面是在 Windows 和 Solaris 系统上执行的命令。Windows:cl -Ic:jdkinclude -Ic:jdkincludewin32 -LD Sample1.c -FeSample1.dllSolaris:cc -G -I/usr/local/jdk/include -I/user/local/jdk/include/solaris Sample1.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 5463.4-2025非金属矿产品词汇第4部分:石墨
- GB/T 46446.1-2025石油、石化和天然气工业碳钢过程容器内涂层和衬里第1部分:技术要求
- 兴趣点地理信息采集员设备技术规程
- 三氯氢硅、四氯化硅提纯工操作安全竞赛考核试卷含答案
- 耐蚀混凝土工安全行为水平考核试卷含答案
- 钢铁产品质检工保密意识评优考核试卷含答案
- 露天采煤机司机安全实操水平考核试卷含答案
- 食品营养学脂肪:核心概念与应用
- 船模制作工风险评估与管理知识考核试卷含答案
- 送配电线路检修工岗前生产安全考核试卷含答案
- 长春建筑学院《马克思主义工会思想史》2024-2025学年第一学期期末试卷
- 家庭教育行为习惯
- 中医处方协定管理标准与实务
- (2025)共青团入团考试试题(含答案)
- 国家宪法日知识竞赛试题库(含答案)
- DB61T 5129-2025 房屋建筑与装饰工程工程量计算标准
- 2025年国际私法试题及答案
- 抗日小英雄课件
- 2025年西南名校联盟“3+3+3”高考英语诊断联考试卷(四)
- 2025版静脉治疗护理技术解读
- 2025年青海省西宁市中考数学数学试卷(附答案解析)
评论
0/150
提交评论