1.下载JNative的包
JNative-1.3.2下有三个文件:JNativeCpp.dll,libJNativeCpp.so,JNative.jar。
JNativeCpp.dll拷到windows/system32目录下
libJNativeCpp.so为Linux中使用的文件
JNative.jar扩展包拷到%JAVA_HOME%/jre/lib/ext下或者导入到工程中
2.Jnative中使用到的一些类和方法
org .xvolks .jnative .Jnative : 装载dll文件,定位函数 如:Jnative native=new Jnative("dllName");
JNative (),setParameter(),setRetVal(),getRetVal() etc.
org .xvolks .jnative .pointers .Pointer: 替代本地函数中的的指针,需要先申请一块内存空间,才能创建,一般使用MemoryBlockFactory 利用工厂模式进行创建.
Pointer(),dispose()
org .xvolks .jnative .pointers .memory .MemoryBlockFactory : 申请一块内存空间
createMemoryBlock()
org .xvolks .jnative .exceptions.NativeException : 抛出装载,定位等方面的异常
org .xvolks .jnative .Type : 列举和管理Jnative 需要的不同的数据类,一般需要传值的时候指定所传值的类型和函数的返回值
3.使用方法
3.1. 加载dll文件
3.2. 调用函数
4.一个简单的例子:
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class JNativeTest {
public static final int messageBox(int parentHandle, String message,
String caption, int buttons) throws NativeException,
IllegalAccessException {
JNative n = null;
try {
n = new JNative("User32.dll", "MessageBoxA"); // 常量DLL_NAME的值为User32.dll
// 构造JNative时完成装载User32.dll,并且定位MessageBoxA方法
n.setRetVal(Type.INT); // 指定返回参数的类型
int i = 0;
n.setParameter(i++, Type.INT, "" + parentHandle);
n.setParameter(i++, Type.STRING, message);
n.setParameter(i++, Type.STRING, caption);
n.setParameter(i++, Type.INT, "" + buttons); // 指定位置上的参数类型和值
n.invoke(); // 调用方法
return Integer.parseInt(n.getRetVal());
} finally {
if (n != null)
n.dispose(); // 记得释放
}
}
public static void main(String[] args) throws NativeException, IllegalAccessException{
JNativeTest.messageBox(100,"Hello jnative", "jnativetest", 1);
}
}