Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)

  看了网上几个主要的教程,都会导致出现各种错误,对于初学者来说会造成一些困扰。在这里详细记录一下JNI调用过程。本案例的基本配置:Eclipse+VS2015,Win10  64位

(1)编写Java Project

打开Eclipse,新建一个Java Project,如:LearnJNI。新建包名,如:com.cogito。新建一个类TestNative。

编写代码,如下:

[java]  view plain  copy
  1. package com.cogito;  
  2.   
  3. public class TestNative {  
  4.       
  5.     <span style="color:#ff0000;">public native void sayHello();</span>  
  6.       
  7.     public static void main(String[] args) {  
  8.           
  9.         <span style="color:#ff0000;">System.loadLibrary("NativeProject"); //载入dll库  
  10.         TestNative test = new TestNative();  
  11.         test.sayHello(); //调用本地方法</span>  
  12.     }  
  13. }  
(2)生成本地方法的头文件

打开cmd命令提示符,切换到Java Project的bin目录:(projectpath为LearnJNI的目录)

cd projectpath\bin

输入:javah com.cogito.TestNative,回车,可在LearnJNI的bin目录下发现增加了一个H文件com_cogito_TestNative.h。


(3)创建本地方法的C/C++的dll实现

打开VS2015,新建一个Win32控制台应用程序如NativeProject,Win32应用程序向导中依次如图设置:


将刚刚得到的bin目录下的com_cogito_TestNative.h头文件,以及jni.h、jni_md.h共三个头文件,复制到VS2015创建的工程目录../NativeProject/NativeProject/下。

jni.h文件在jdk安装路径下的include文件夹,如:D:\Program Files\Java\jdk1.7.0_79\include

jni_md.h文件在jdk安装路径下的include/win32文件夹,如:D:\Program Files\Java\jdk1.7.0_79\include\win32

使得三个.h文件如图:


右键VS2015中建立的工程NativeProject,添加->现有项,选择com_cogito_TestNative.h文件。导入头文件后,双击打开,更改#include <jni.h>为#include "jni.h",保存(Ctrl+S)。如图:

[cpp]  view plain  copy
  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include "jni.h"  
  3. /* Header for class com_cogito_TestNative */  
  4.   
  5. #ifndef _Included_com_cogito_TestNative  
  6. #define _Included_com_cogito_TestNative  
  7. #ifdef __cplusplus  
  8. extern "C" {  
  9. #endif  
  10. /* 
  11.  * Class:     com_cogito_TestNative 
  12.  * Method:    sayHello 
  13.  * Signature: ()V 
  14.  */  
  15. <span style="color:#ff0000;">JNIEXPORT void JNICALL Java_com_cogito_TestNative_sayHello  
  16.   (JNIEnv *, jobject);</span>  
  17.   
  18. #ifdef __cplusplus  
  19. }  
  20. #endif  
  21. #endif  

然后新建一个cpp文件,即右键NativeProject,添加->新建项,命名如:source.cpp,添加上述头文件的红色部分函数的实现代码:(注意#include头文件为刚导入的com_cogito_TestNative.h)

[cpp]  view plain  copy
  1. # include "com_cogito_TestNative.h"  
  2. # include <iostream>  
  3.   
  4. using namespace std;  
  5.   
  6. JNIEXPORT void JNICALL Java_com_cogito_TestNative_sayHello(JNIEnv *, jobject)  
  7. {  
  8.     cout << "Hello World!" << endl;  
  9. }  
接下来,设置编译版本和平台,根据需要设置,如release版x64平台


F7进行编译,编译成功后将在工程的x64/release/下生成dll文件。


(4)测试Java调用dll

首先设置本地库目录位置,即在Eclipse中右键(1)中的LearnJNI工程->propertise,选择source标签,展开LearnJNI/src,选中Native library location:(None),右侧点击Edit,复制上述NativeProject.dll的路径填入,如图



然后运行(1)中创建的TestNative类,得到结果输出,大功告成。


附上源码连接:利用JNI实现Java调用C++库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值