1 / 22
文档名称:

JNI学习笔记.doc

格式:doc   大小:369KB   页数:22页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

JNI学习笔记.doc

上传人:zbfc1172 2019/9/23 文件大小:369 KB

下载得到文件列表

JNI学习笔记.doc

文档介绍

文档介绍:开篇·java是跨平台的语言,但是在有些时候仍需调用本地代码(通常由C、C++开发)·SUN公司提供的JNI是Java平台的一个功能强大的接口,这个JNI接口提供了Java与操作系统本地代码相互调用的功能。最简单的Java调用C、C++代码的步骤——HelloWorld·..jni;lassHelloWorld{ publicvoidsayHello();//本地方法声明。 publicstnativeaticvoidmain(String[]args){ }}·使用javah命令生成包含native方法定义的C/C++..:/*DONOTEDITTHISFILE-itismachinegenerated*/#include<>/*_jni_HelloWorld*/#_jni_HelloWorld#_jni_HelloWorld#ifdef__cplusplusextern"C"{#endif/**_jni_HelloWorld*Method:sayHello*Signature:()V*/_jni_HelloWorld_sayHello(JNIEnv*,jobject);#ifdef__cplusplus}#endif#endif·按照生成的C/C++头文件来写C/C++源文件【1】打开VisualStudio2005,新建一个项目:选择VisualC++àWin32àWin32控制台应用程序à输入项目名JavaNativeà确定à然后选择dllà空项目à完成。【2】++项目目录之下并将之引入到解决方案的头文件目录下,然后在源文件中新建C++源文件,写具体的实现#";#include<iostream>usingnamespacestd;_jni_HelloWorld_sayHello(JNIEnv*evn,jobjectobj){ cout<<"HelloWorld!"<<endl;}【3】编译之,出现如下错误:①fatalerrorC1083:无法打开包括文件:“”:,而这个头文件在JAVAHOME/include文件夹下面,所以将之拷贝到C++项目的目录下,#include<>,这种方式是在系统目录下找的,因为也需要将之改为#include””,这样就在项目目录下找了。②fatalerrorC1083:无法打开包括文件:“”:,可以将JAVAHOME/include/win32下找到拷贝到项目目录下。这样编译通过·将C/C++源文件译成动态连接库(DLL)点击工具栏上的生成,生成JavaNative,·将DLL文件加入到PATH环境变量下。将之前生成的dll文件的目录加入的path环境变量之下·java类中加载DLL,..jni;lassHelloWorld{ ativevoidsayHello();//本地方法声明。 publicstaticvoidmain(String[]args){ ("JavaNative"); //Exceptioninthread"main":no // //Eclipse启动的时候会读取一次环境变量,之后就不再读取了,因此应该重启Eclipse newHelloWorld().sayHello(); }}最终打印出了:HelloWorld!使用JNI的两个弊端·使用了JNI,那么javaApplication将不能跨平台了,如果要移植到别的平台上,那么native代码就要重新进行编译·java是强类型的语言,而C/C++不是因此写JNI代码时更为小心·总之,必须在构建java程序的时候,尽量少用本地代码。本地代码访问Java代码·在被调用的C/C++函数中也可以反过来访问java程序中的类·javah工具生成的C/C++函数声明中,可以看到有两参数:_jni_HelloWorld_sayHello(JNIEnv*,jobject);·JNIEnv类型实际上代表了java环境,通过这个JNIEnv*指针就可以对java端的代码进行操作,例如:创建j