JNI JAVA 调取C++dll文件(64位/32位)动态库测试demo教程
首先准备环境:
- 系统环境:win10 64x系统
- 开发环境:JDK1.8以上
- 开发工具:java [Eclipse] C++[VS2012]
参考网上资料:
https://www.cnblogs.com/cuglkb/p/5665882.html (如有不妥,请告知)
代码demo部分:
创建一个名为JavaCJniTest的java项目,并创建一个test包;
创建一个java类HelloDll.java文件,代码如下:
- Java代码部分:
package test;
public class HelloDll {
public native void print(String str); // 打印输出
public static void main(String[] args) {
// 加载dll文件
System.load("E:\\smarwork\\JavaCJniTest\\t1.dll");
// 这里可以填写绝对路径,也可以用system.loadLibrary("");这种方法,需要将dll文件放到项目根目录下即可
HelloDll helloDll = new HelloDll();
helloDll.print("喔噻,这是一个测试居然出来了ㄟ(▔,▔)ㄏ ");
}
}
根据创建的HelloDll类,再根据javah命令在命令窗口创建h头文件,命令如下:
E:\smarwork\JavaCJniTest\src>javah -classpath E:\smarwork\JavaCJniTest\src -jni test.HelloDll
快速进入该文件夹的方式进入该文件,进入src处,选中文件夹再按住shift键,右击选择在此处打开命令窗口,如下图:
如图为命令在命令行生成.h头文件成功后的效果
到src目录下查看生成的.h头文件
生成的test_HelloDll.h文件代码如下,具体不解释了:
然后再根据上述命令生成h文件,根据h文件就可以进入下一步C++的代码项目的创建了。
打开VS创建一个名为HelloDll的Win32的项目,选择dll完成;
然后把test_HelloDll.h头文件拷贝到项目中,如图:
根据拷贝好的把头文件引入,头文件-右击添加-现有选择拷贝好的文件即可;
导入jni依赖,项目右击属性-配置属性-C/C++-附加包含目录,依次选择jdk下include目录、win32目录、bridge,然后点击确定,应用在确定即可如图:
然后编写HelloDll.cpp文件代码,代码如下:
- C++代码部分:
// HelloDll.cpp : 定义 DLL 应用程序的导出函数。
#include<iostream>
#include"test_HelloDll.h"
/*
* Class: test_HelloDll
* Method: print
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_test_HelloDll_print(JNIEnv * env, jobject obj, jstring str){
const char *msg;
msg = env->GetStringUTFChars(str,0);
std::cout<<"the msg is"<<std::endl;
std::cout<<msg<<std::endl;
env->ReleaseStringUTFChars(str,msg);
}
注意x64位系统需要修改成x64进行生成,项目-》属性-》平台选择配置管理器-》选择平台新建-》然后选择x64,如图:
根据编写好的点击生成,把生成好的dll文件拷贝到项目根目录下,如图:
- 根据上述完成步骤进行代码测试,如图: