1、 jni开发步骤如下:
a) 在d:/temp/jni目录下建立com/skymobi/dll,三个目录,即包的目录,在该包下建一个HelloWorld.java,具体代码如下:
package com.skymobi.dll;
public class HelloWorld {
public native void displayHelloWorld();
public native int retNum();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
int liRet = new HelloWorld().retNum();
System.out.println("返回值="+liRet);
}
}
b) 进入DOS命令,cd到d:/temp/jni,编译javac com/skymobi/dll/HelloWorld.java,生成class文件;再生成头文件javah com.skymobi.dll.HelloWorld,会生成.h文件,文件名com_skymobi_dll_HelloWorld.h。 将class文件打包, ,生成skymobi_dll_v1.0.jar。
c) 根据头文件,结合C生成hello.dll,具体步骤见下面说明;将hello.dll复制到tomcat/lib目录下(或者放到path中)。
d) 经过上面步骤jni调用开发完成了,在项目中,只要将skymobi_dll_v1.0.jar导入,然后调用HelloWorld类中的方法就OK了。
2、 用vc生成dll文件的过程:
文件-->新建-->工程选项卡--》win32 Dynamic-Link Library,在工程名称中输入名称例如:hello,点确定--》一个空的DLL工程(E)--》完成--》确定。接着再点击文件--》新建--》文件选项卡:C++ Source File--》输入文件名:例如hello,确定进入hello.cpp编辑窗口,
复制一下代码:
#include <jni.h>
#include "com_skymobi_dll_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_skymobi_dll_HelloWorld_displayHelloWorld
(JNIEnv *, jobject){
printf("hello chalin.cai!/n");
return;
}
JNIEXPORT jint JNICALL Java_com_skymobi_dll_HelloWorld_retNum
(JNIEnv *, jobject){
return 123;
}
在编译生成hello.dll之前,你需要先将java_home目录下的include文件夹下的jni.h 和你刚才编译好的com_skymobi_dll_HelloWorld.h放到VC98/include文件夹下,然后进行编译。不然vc++会找不到头文件而报错。编译之后你就可以在你的VC项目文件夹下的hello项目的debug文件夹下看到我们生成好的hello.dll 呵呵 这就是我们在Java类中调用的dll文件。
3、 项目调用例子
将第一步生成的jar导入
public class TestDLL {
public static void main(String[] args) {
HelloWorld hello = new HelloWorld();
System.out.println(hello.retNum());
}
}
这样结果就出来了,转载将标明转至caiqiling博客,谢谢。