JNI使用方法

开发环境:
Java:IntelliJ IDEA
dll:Visual Studio 2017 Community

1、编写Java类
public class NativeTest {
    //通过native关键字,声明一个本地方法
    public native void sayHello();

    public static void main(String[] args){
        System.loadLibrary("HelloWorld");   //"HelloWorld"是之后生成的.dll文件的文件名
        
        NativeTest nativeTest = new NativeTest();   //实例化类对象
        nativeTest.sayHello();                      //调用本地方法
    }
}
2、生成.class文件

在IntelliJ IDEA的Terminal中输入:javac NativeTest.java
此时在\JNITest\src文件下生成了一个NativeTest.class文件。

3、生成.h头文件

在IntelliJ IDEA的Terminal中输入:javah -jni NativeTest
此时在\JNITest\src文件下生成了一个NativeTest.h文件,文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeTest */

#ifndef _Included_NativeTest
#define _Included_NativeTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     NativeTest
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_NativeTest_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

4、编写C代码

通过Visual Studio 2017 Community新建一个项目,选择“动态链接库(DLL)”。
VS新建项目
把上一步生成的NativeTest.h文件复制到项目目录下,
复制头文件
然后在HellowWorld.cpp文件中输入如下代码:

#include "stdafx.h"
#include "jni.h"
#include "jni_md.h"
#include "jawt_md.h"
#include "NativeTest.h"

JNIEXPORT void JNICALL Java_NativeTest_sayHello(JNIEnv *env, jobject obj) {
	printf("Hello World By Visual Studio 2017\n");
}
5、生成.dll文件

生成.dll文件
可以在DebugRelease文件夹中找到新生成的HelloWorld.dll文件,将它复制到Java项目的\JNITest\src文件夹中。

6、测试

在IDEA的Terminal中输入:java NativeTest
测试结果
可以看出成功调用了.dll文件中的函数。

7、可能遇到的问题
  1. 在第4步include头文件时,可能会报错,可以参考这篇文章
  2. 在第6步运行程序时,可能会提示"Can’t load IA 32-bit .dll on a AMD 64-bit platform",原因是生成的.dll文件是32位的,不是64位的,可参考这篇文章
8、其它参考资料
  1. https://www.cnblogs.com/cuglkb/p/5665882.html
  2. https://blog.csdn.net/zcw1994/article/details/80077701
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值