欢迎使用CSDN-markdown编辑器

来源:互联网 发布:西安中国银行软件中心 编辑:程序博客网 时间:2024/06/09 07:14
Java调用DLL的方式之一:JNI(Java Native Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机器上调用不同的本地库, JNI的应用方案是基于Java类和本地函数相映射的。调用步骤如下:1、使用eclipse或者其他工具编写好class部分如下:`package examle.jni.test;public class JavaCallDll {static {     System.loadLibrary("DllName");  //加载DLL的名称:DllName.dll } public native String[] Test1(int a, String b);public native String[] Test2(int[] a, int[] b);public static void main(String args[]){}

}`
2、生成.h文件:
如果使用eclipse等工具,它可以帮助你编译生成examle_jni_test_JavaCallDll.class.路径在你的工程文件下$ProjectPath\bin\example\jni\text\JavaCallDll
打开cmd,进入到该文件下:
执行 javah -classpath . example.jni.text.JavaCallDll 命令即可,在bin文件夹下则会生成example_jni_test_JavaCallDll.h
这里写图片描述

如果是自己手动执行则:第一步:javac example.jni.test.JavaCallDll.java  生成java2cpp.class;第二步:javah -classpath . example.jni.text.JavaCallDll      生成example_jni_test_JavaCallDll.h

生成.h如下:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class example_jni_test_JavaCallDll */#ifndef _Included_example_jni_test_JavaCallDll#define _Included_example_jni_test_JavaCallDll#ifdef __cplusplusextern "C" {#endif/* * Class:     example_jni_test_JavaCallDll * Method:    Test1 * Signature: (ILjava/lang/String;)[Ljava/lang/String; */JNIEXPORT jobjectArray JNICALL Java_example_jni_test_JavaCallDll_Test1  (JNIEnv *, jobject, jint, jstring);/* * Class:     example_jni_test_JavaCallDll * Method:    Test2 * Signature: ([I[I)[Ljava/lang/String; */JNIEXPORT jobjectArray JNICALL Java_example_jni_test_JavaCallDll_Test2  (JNIEnv *, jobject, jintArray, jintArray);#ifdef __cplusplus}#endif#endif
3、编写C/C++代码实现.h头文件中声明的函数, 实现接口方法,可以在实现方法中调用第三方DLL库注意:复制 %jdk%\include\win32\jni_md.h和%jdk%\include\jni.h 到项目根目录下,复制example_jni_test_JavaCallDll.h到项目根目录,example_jni_test_JavaCallDll.h文件的引用 include 修改成 include "jni.h", 然后工程头文件中引用其以上三个文件。

0 0