欢迎来到天天文库
浏览记录
ID:39551638
大小:57.00 KB
页数:9页
时间:2019-07-06
《JNI实现Java与C++相互调用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、通过JNI实现Java和C++的相互调用 通过JNI实现Java和C++的相互调用一、从Java调用C++的DLL1. 创建Java文件创建名为TestNative的Java文件,注意包名。packageorg.druze.test;publicclassTestNative{ publicnativevoidsayHello(); publicvoidsayHello2(){ System.out.println("SayHelloFromJava"); }}如代码所示,对于say
2、Hello方法声明为native,这一部分将由C++的动态库来实现。2. 生成class文件使用javacorg/druze/test/TestNative.java生成class文件注意:执行该命令在org所在目录执行。3. 使用javah命令生成相应的C++头文件使用javahorg.druze.test.TestNative生成名为org_druze_test_TestNative.h的头文件注意:执行该命令在org所在目录执行。该头文件的内容如下:/*DONOTEDITTHISFILE-iti
3、smachinegenerated*/#include/*Headerforclassorg_druze_test_TestNative*/#ifndef_Included_org_druze_test_TestNative#define_Included_org_druze_test_TestNative#ifdef__cplusplusextern"C"{#endif/* *Class: org_druze_test_TestNative *Method: sayHello *Si
4、gnature:()V */JNIEXPORTvoidJNICALLJava_org_druze_test_TestNative_sayHello (JNIEnv*,jobject);#ifdef__cplusplus}#endif#endif4. 创建C++解决方案此处以VS2008为例。新建一个VC++的Win32项目,选择如图所示的控制台应用程序。项目名称为NativeCode。点击确定后,再点击下一步,出现该页面,应用程序类型选择DLL,附加选项选择DLL5. 创建号工程之后,将org_dru
5、ze_test_TestNative.h导入到工程里面,并创建名为source.cpp的源代码,内容如下:#include"org_druze_test_TestNative.h" #include usingnamespacestd; JNIEXPORTvoidJNICALLJava_org_druze_test_TestNative_sayHello(JNIEnv*env,jobjectobj){ cout<<"HelloWorld!"<6、具->选项->项目和解决方案->VC++目录菜单中,平台选择Win32,选择“显示以下内容的目录”为“包含文件”,导入jni.h和jni_md.h的路径。7. 编译,生成NativeCode.dll,并将其copy到环境变量PATH的路径下。8. 修改TestNative.javapackageorg.druze.test;publicclassTestNative{ publicnativevoidsayHello(); publicstaticvoidmain(String[]args){7、 //加载动态连接库DLL,如果没有找到的话,则会在运行时报错 System.loadLibrary("NativeCode"); TestNativetnt=newTestNative(); tnt.sayHello(); } publicvoidsayHello2(){ System.out.println("SayHelloFromJava"); }}运行,显示“HelloWorld8、!” 9. 注意头文件jni.h和jni_md.h可以直接导入到工程中也可以。10.注意NativeCode.dll必须放置在java命令能访问的路径中。二、从C++调用Java1.创建TestNative2.Javapackageorg.druze.test;publicclassTestNative2{ publicstaticvoidtestPrint(){ System.o
6、具->选项->项目和解决方案->VC++目录菜单中,平台选择Win32,选择“显示以下内容的目录”为“包含文件”,导入jni.h和jni_md.h的路径。7. 编译,生成NativeCode.dll,并将其copy到环境变量PATH的路径下。8. 修改TestNative.javapackageorg.druze.test;publicclassTestNative{ publicnativevoidsayHello(); publicstaticvoidmain(String[]args){
7、 //加载动态连接库DLL,如果没有找到的话,则会在运行时报错 System.loadLibrary("NativeCode"); TestNativetnt=newTestNative(); tnt.sayHello(); } publicvoidsayHello2(){ System.out.println("SayHelloFromJava"); }}运行,显示“HelloWorld
8、!” 9. 注意头文件jni.h和jni_md.h可以直接导入到工程中也可以。10.注意NativeCode.dll必须放置在java命令能访问的路径中。二、从C++调用Java1.创建TestNative2.Javapackageorg.druze.test;publicclassTestNative2{ publicstaticvoidtestPrint(){ System.o
此文档下载收益归作者所有