美文网首页
JNI-Windows

JNI-Windows

作者: LeftFlower | 来源:发表于2019-06-19 17:22 被阅读0次

    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)

    相关文章

      网友评论

          本文标题:JNI-Windows

          本文链接:https://www.haomeiwen.com/subject/ambkqctx.html