以下这个例子实现的是通过调用c写的dll,计算字符串长度。
一、 生成c的头文件
1. 编辑main.java
|
2. 生成头文件
按win + r打开“运行”窗口,输入“cmd”,打开dos控制台窗口。进入上面main.java所在的目录中,输入:
javac main.java
javah main
两条命令完成后会生成main.h文件
二、 生成dll
1. 新建空工程
在vs中新建工程:win32 console application,取名“makedll”,选择空工程。新建后修改工程属性:
(1) general中,将“configuration type”改为“dynamic library (.dll)”;
(2) c/c++的general中,将“additional include directories”添加两项:
“c:program filesjavajdk1.5.0_06include”
“c:program filesjavajdk1.5.0_06includewin32”
根据你安装的java路径而设置,这是因为在c/c++编译过程中要使用java的jni.h等文件
2. 将上面生成的main.h添加入工程
3. 新建一个新的文件main.cpp,代码如下:
|
4. 按f7编译链接,生成makedll.dll文件
三、 java调用dll
在java中使用上面生成的dll文件:
1. 将makedll.dll复制到与使用dll的java文件相同的目录下。
2. java文件的源代码:
|
总结:
另外,java与dll函数的参数传递过程,像int类型的,可以直接从jni函数参数列表中获取;而数组元素则要通过jnienv来获取:
jbyte *buffer = (*env).getbytearrayelements(str, 0); // str是参数列表中jbytearray变量
同理可以获取char[]的元素。
函数返回时,可以直接用return语句返回。也可以设置参数列表中的变量指针来返回:
(*env).setbytearrayregion(bytearray, 0, 128, bytearr);
bytearray是参数列表中的jbytearray变量,作为指针用来返回需要返回的信息;bytearr是jbyte*类型,里面存放的值是要返回的内容。
其它的信息可以从google或baidu中通过查找“jni”或“java调用dll”来查阅到。
(t007)
闽公网安备 35060202000074号