java jni调用c/c++ dll
创建一文件夹Test,里面建一java类Test.java,代码如下:
public class Test{
static{
System.loadLibrary("Test");
}
public native int test();
public static void main(String[] args){
Test test = new Test();
System.out.println(test.test());
}
}
进入cmd下,进入该目录,java Test.java 编译之后 ,javah -jni Test,生成Test.h
这是一个C的头文件,该头文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test */
#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Test
* Method: test
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_Test_test
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
这前面的include <jni.h>可以改为include "jni.h",jni.h这个文件在jdk目录的include文件夹内,可以拷贝到当前Test目录。
然后就是创建C代码文件,Test.c代码如下:
#include "test.h"
JNIEXPORT jint JNICALL Java_Test_test
(JNIEnv *env, jobject obj)
{
return 1;
}
然后用法cl命令(cl是C编译器编译命令)编译Test.c,命令如下:
cl -Id:\jdk\include -Id:\jdk\include\win32 -LD Test.c (myDll.lib) -FeTest.dll
(myDll.lib)是你的C代码文件中用到的代码库,此例中没用到,不需导入,-Id指明的path指的是jni所需的头文件.h文件的位置。-LD表明要生成动态链接库 即dll
最后就来测试下 在Test目录下java Test运行Test.class
补充:软件开发 , Java ,