• Java使用JNI调用DLL库


    JNI是Java自带的方法,不需要引入第三方jar包,优点是因为是java自带的方法,兼容性较好,缺点就是代码书写繁琐

    1. 新建Java项目Test --> 新建测试类TestNative,声明本地方法,代码如下:
    package com.test;
    
    public class TestNative {
    	public native void sayHello();
    	
    	public static void main(String[] args) {
    		System.loadLibrary("NativeProject");
    		TestNative test = new TestNative();
    		test.sayHello();
    	}
    }
    

    使用eclipse编写的类会直接在项目bin目录下自动生成.class文件。如果不使用eclipse,请手动使用javac生成.class文件

    1. 生成.h头文件,使用cmd命令行工具切换到项目src这一层目录,键入指令:
    javah -classpath D:UsersAdministratorworkspaceTestin com.test.TestNative
    

    注意

    • -classpath后面跟的为Java项目bin目录完整路径
    • 类名必须加上包名
    1. 使用vs2015生成DLL文件,新建WIN32项目NativeProject --> 勾选DLL --> 空项目

    2. 去java项目src目录下复制刚刚生成的 com_test_TestNative.h,jdkinclude目录下的jni.h,jdkincludewin32目录下的jni_md.h这三个文件到c++项目NativeProject --> NativeProject文件夹下

    3. 右键NativeProject --> 添加 --> 现有项,把刚刚复制过来的三个.h头文件添加进来

    4. 打开com_test_TestNative.h文件,把头部#include <jni.h>改成#include "jni.h",否则不能成功导入,com_test_TestNative.h代码如下:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include "jni.h"
    /* Header for class com_test_TestNative */
    
    #ifndef _Included_com_test_TestNative
    #define _Included_com_test_TestNative
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_test_TestNative
     * Method:    sayHello
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello
      (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    
    
    1. 右键NativeProject --> 新加项 --> 新加source.cpp文件,在该cpp文件实现方法,代码如下
    #include "com_test_TestNative.h"
    #include <iostream>
    using namespace std;
    
    JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello(JNIEnv *, jobject) {
    	cout << "Hello World!" << endl;
    }
    
    1. 点击生成 --> 生成解决方案 --> 去NativeProject下的DEBUG目录中复制NativeProject.dll文件到Java项目文件夹下。

    2. 运行Java测试类,运行成功

  • 相关阅读:
    为什么hive表有数据,但count(*)返回0
    数仓建设时,要建历史表,用于保存历史数据,用于日后出问题时,起修复数据的作用。按日期分区,每天都把所有的数据存到当天的分区里
    get_json_object用以获取json类型的字段的值
    str_to_map语句,字符串类型变map类型
    按更新时间取最新记录
    hive临时表
    数仓分层
    次日留存、七日留存
    转义
    数据库三范式
  • 原文地址:https://www.cnblogs.com/vevy/p/9077691.html
Copyright © 2020-2023  润新知