JNI-Windows

2019-06-19  本文已影响0人  LeftFlower

Windows

Windows平台的JNI本地调用基本类似,区别就是制作的动态库不同,Linux平台是*.so,Windows平台是*.dll

public class Hello {
    public native static String sayHello(String name);

    static {
        System.load("D:\\ewp\\JNI_Test\\src\\libhello.dll");
    }

    public static void main(String[] args) {
        Hello hello = new Hello();
        String ret = hello.sayHello("kelvin");
        System.out.println(ret);
    }
}

cmd进入工作目录,生成编译文件Hello.class和头文件Hello.h


javac -h . Hello.java

使用VS 2019创建动态链接库DLL

image.png
image.png

切换到项目视图

image.png

编写Native Method

#include "pch.h"
#include <iostream>
#include "Hello.h"

using namespace std;

JNIEXPORT jstring JNICALL Java_Hello_sayHello(JNIEnv* env, jclass jc, jstring name)
{
    const char* buf = { 0 };
    buf = env->GetStringUTFChars(name, NULL);

    cout << buf << endl;

    return env->NewStringUTF("hello");
}

添加头文件

把生成的本地头文件Hello.h导入到工程中;另外,还需要把jni.hjni_md.h这两个头文件也导入到工程中,修改Hello.h
Note:直接复制进来是无效的,需要右键头文件目录新建头文件,然后将内容导入

image.png

生成动态库

编译工程,生成动态链接库。如果是64位系统,还需要设置Debugx64,否则会报错。生成 ->配置管理器 or 直接工具栏Debug设置即可

image.png

调用动态库

切换到文件夹视图,把工程的根目录下Debug中的libHello.dll拷贝到Hello.class目录,如果是x64则是在目录x64目录的Debug目录下;然后,调用Hello测试jni的本地调用

java Hello
kelvin
hello

参考网址

JNI编程实现(Linux)

JNI编程实现(Windows)

上一篇下一篇

猜你喜欢

热点阅读