




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JNI 学习笔记1、 Windows下JNI HelloWorld程序1.1 开发环境eclipse indigo SR1 + JDK1.6.0_33 + VC+ 6.01.2 Java端代码package com.tcl.jni;public class Hello staticSystem.out.println(System.getProperty(java.library.path);System.loadLibrary(Hello);public native void sayHello();native关键字表明此sayHello方法是本地方法,方法的实现由C+完成;static静态代码块内部为加载名字为Hello的动态链接库;System.getProperty(java.library.path) 为输出调试信息。1.3 生成.h头文件使用javah命令生成.h文件,cmd进入eclipse工程目录bin文件夹下,输入javah com.tcl.jni.Hello,会在bin文件夹生成com_tcl_jni_Hello.h文件。文件内容为把 #include 改为 #include “jni.h”1.4 输出动态链接库VC+ 6.0新建空的DLL工程,将上述生成的头文件加入到项目中,拷贝JAVA_HOME/include/jni.h 和 JAVA_HOME/include/win32/jni_md.h到项目根目录下;新建cpp文件,包含com_tcl_jni_Hello.h文件,实现其中的方法,代码为 compile、build连接之后在debug目录中生成dll文件。1.5 Java代码调用dll文件要让java代码能够认识并找到这个动态链接库,就必须把这个DLL放到windows path环境变量下面。有两种方法可以做到:u 把这个dll放到windows下面的system32文件夹下。u 配置VC+工程的Debug目录到path下。重启eclipse。注:如果出现java.lang.UnsatisfiedLinkError的错误,可以根据System.out.println(System.getProperty(java.library.path);打印出来的信息查看dll是否已经加入到path路径下,如果重启eclipse不起作用,需要重启一次机器。1.6 运行编写测试代码import com.tcl.jni.Hello;public class Test public static void main(String args) Hello hello = new Hello();hello.sayHello();运行并查看结果,打印出字符串hello。2、 传递参数的方法这个事例中将三个常用参数类型传递给本地函数:string,int, boolean。1) Java代码package com.tcl.jni;public class MyNative staticSystem.loadLibrary(MyNative);public void showParms(String s, int i, boolean b)showParms0(s, i, b);private native void showParms0(String s, int i, boolean b);2) C代码参数解释JNIEnv * env: 调用JNI方法时使用JNI Environment指针;jobject obj: 指向此Java代码中实例化的Java对象的一个句柄;GetStringUTFChars:JNI API,用来根据Java字符串或jstring参数创建C字符串。因为本地代码不能直接读取Java字符串,而必须将其转换为C字符串或Unicode。3) Java和C数据类型映射关系它们之间的映射关系被定义在jni.h和jni_md.h中3、 有返回值的方法1) Java代码2) C代码或者4、 静态方法实用方法通常不需要实际的对象,通常都将它们创建为静态方法。1) 将上例中的方法改为静态方法,java代码如下: 2) 生成的.h文件只有一个地方有变化方法第2个参数有jobject类型变成jclass类型,方法的实现不变。3) 运行时不用实例化对象System.out.println(MyNative.hypotenus(3, 4);5、 传递String数组参数本例说明如何访问非基本对象的数组。1) Java代码:2) C代码:头文件C文件3) 测试代码6、 返回Java String数组1) 本例说明如何在本地代码中创建一个字符串数组并将它返回给Java调用者。Java代码2) C头文件C文件字符串数组是通过New
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海城建职业学院《光学测试技术》2023-2024学年第一学期期末试卷
- 影视制作行业市场现状及盈利模式研究
- 教育信息化背景下的学生自主发展
- 广告内容创意与执行流程
- 安徽电气工程职业技术学院《儒道文化与中国文学》2023-2024学年第一学期期末试卷
- 贵州建设职业技术学院《传染病学B》2023-2024学年第一学期期末试卷
- 登机桥监控解决方案-inhand-20210628
- 牡丹江医学院《工程流体力学基础A》2023-2024学年第一学期期末试卷
- 黄河交通学院《建筑环境模型制作》2023-2024学年第一学期期末试卷
- 广西演艺职业学院《体育与健康-健美操》2023-2024学年第一学期期末试卷
- 脑挫伤患者的护理
- 腰椎间盘突出症手术的围手术期护理
- 警卫道路培训课件
- 感染性疾病分子诊断试剂行业深度调研及发展战略咨询报告
- GB/T 45355-2025无压埋地排污、排水用聚乙烯(PE)管道系统
- 安全生产风险防控课件
- ISO45001 2024职业健康安全管理体系要求及使用指南
- 2025年湖南株洲南方中学自主招生英语试卷真题(含答案详解)
- 劳务绿化合同范本
- 2025年云南黄金矿业集团股份有限公司招聘笔试参考题库含答案解析
- 基于BOPPPS框架与线上线下混合教学模式的探索
评论
0/150
提交评论