最近用到了java调用dll,网上找到了JNative这个开源的东西。
怎么用呢?
想自己编写个dll实验下。
于是找C/C++的编译器,人家推荐用MinGW。
先写个头文件吧:
test.h:
#ifndef MINGW_DLL_H__ #define MINGW_DLL_H__ int add(int a,int b); #endif
接着写C文件:
test.c:
#include <stdio.h> #include "test.h" int add(int a,int b){ printf("\n"); printf("dll function add() called\n"); return a+b; }
用MinGW将C编译成dll,命令如下:
gcc -Wall -shared test.c -o test.dll
把test.dll放到System32下面,
最后,该是写我们的java代码的时候了:
Test.java:
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class Test{
public static int testJNative(int a,int b) throws NativeException, IllegalAccessException{
JNative n = null;
try{
n = new JNative("zzz.dll", "add");
n.setRetVal(Type.INT);
n.setParameter(0 , a ) ;
n.setParameter(1, b);
n.invoke();
System.out.println( "返回:" + n.getRetVal());
return Integer.parseInt(n.getRetVal());
}finally{
if (n != null)
n.dispose();
}
}
public static void main(String[] args) throws NativeException, IllegalAccessException{
testJNative(1, 4);
}
}
OK了!
运行下试试,结果如下:
返回:5。
dll function add() called
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>----------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
这个并不麻烦,可是,就MinGW,倒是不好搞,但是毕竟已经搞定,下面是我的方法:
先到 http://sourceforge.net/project/showfiles.php?group_id=2435
找到第一个:Automated MinGW Installer,下载下来,然后安装,安装时,选择全部安装就可以了,
他会自动的下载所有需要的文件。
刚开始的时候按照网上介绍的方法,一个一个文件下载的,没注意这个东西,结果,总是报少文件,
后来才发现的他,把原来的全删掉,OK了!
JNative的下载地址是:http://sourceforge.net/project/showfiles.php?group_id=156421,这个东西倒是不难,
把它带的dll放到system32下面,就OK了!