java利用JNI 调用C++(dll)函数完整代码示例

JNI是什么?

JNI(Java Native Interface)意为JAVA本地调用,它允许Java代码和其他语言写的代码进行交互,简单的说,一种在Java虚拟机控制下执行代码的标准机制。

第一步:创建好一个类

创建一个Java类,例如JNITest .java,具体代码如下:

public class JNITest {
    static {

        System.loadLibrary("DwgOperInterface");

    }

    public native String getDllFunction();

    public native String transObject(MapController mapController);

    public static void main(String[] args) {
        new JNITest().getDllFunction();
    }

}

注:DwgOperInterface为dll文件的名称,建议放在jdk BIN文件夹下

第二步:生成JNITest.h头文件

CMD控制台,切换到src/main/java 文件夹下,输入生成头文件命令,在该文件夹下生成头文件

javah -encoding utf-8 -classpath . -jni com.hxtx.spacedata.controller.map.JNITest 

java利用JNI 调用C++(dll)函数完整代码示例_第1张图片

第三步:用c语言代码实现生成头文件里的接口

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class com_hxtx_spacedata_controller_map_JNITest */

#ifndef _Included_com_hxtx_spacedata_controller_map_JNITest
#define _Included_com_hxtx_spacedata_controller_map_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_hxtx_spacedata_controller_map_JNITest
 * Method:    getDllFunction
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_hxtx_spacedata_controller_map_JNITest_getDllFunction
  (JNIEnv *, jobject);

/*
 * Class:     com_hxtx_spacedata_controller_map_JNITest
 * Method:    transObject
 * Signature: (Lcom/hxtx/spacedata/controller/map/MapController;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_hxtx_spacedata_controller_map_JNITest_transObject
  (JNIEnv *, jobject, jobject);

#ifdef __cplusplus
}
#endif
#endif

第四步:用c语言代码实现生成头文件里的接口,后的dll文件替换JDKbin文件夹的dll文件即可。

相关文章 java利用JNA 调用C++(dll)函数完整代码示例

你可能感兴趣的:(技术交流,jni,java,c++)