Java中调用dll动态库的简洁方法

解压JNative-1.3.2.zip 获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。JNativeCpp.dll Windows下用的,拷到windows / system32目录下;

  libJNativeCpp.so Linux下使用的;

  JNative.jar 这是一个扩展包,加载到你的程序中就可以。

  一个简单例子

  
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”不用也 可以, 常量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());
}catch(Exception ex){
ex.printStackTrace();
}finally {
if (n != null)
try {
n.dispose();
}catch (NativeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 记得释放
}
return 0;
}

  public static void main(String[] args) throws NativeException, IllegalAccessException{
JNativeTest.messageBox(100,“这是使用jnative练习”, “jnativetest”, 1);
}
}


  关于linux下编译 C代码部分说明:

  对于linux不同版本,可能会导致libJNativeCpp.so不同

  原带的libJNativeCpp.so 是在glic2.4下编译的

  为了适应glic2.3的情况,重新编译了libJNativeCpp.so,在for gcc3.4.6 glibc 2.3下。

  编译办法:

  在JNative-1.3.2-src\JNativeCpp\Release目录下

  1、备份calls.o和 asm_io.o这两个Object文件

  2、make clean

  3、恢复到当前目录calls.o和 asm_io.o这两个Object文件

  4、make

  目前已经修改了Release目录下的makefile和subdir.mk文件,使得在make clean的时候不删除calls.o和 asm_io.o两个文件

  附:linux 动态库搜索路径:

  export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

  makefile 文件

  ################################################################################

  # Automatically-generated file. Do not edit!

  ################################################################################

  -include 。./makefile.init

  RM := rm -rf

  # All of the sources participating in the build are defined here

  -include sources.mk

  -include subdir.mk

  -include objects.mk

  ifneq ($(MAKECMDGOALS),clean)

  ifneq ($(strip $(C++_DEPS)),)

  -include $(C++_DEPS)

  endif

  ifneq ($(strip $(CC_DEPS)),)

  -include $(CC_DEPS)

  endif

  ifneq ($(strip $(C_DEPS)),)

  -include $(C_DEPS)

  endif

  ifneq ($(strip $(CPP_DEPS)),)

  -include $(CPP_DEPS)

  endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值