天天看点

关于JNA调用32位和64位动态链接库,即*.dll

今天研究了下JNA,感觉收获不小,这货可比JNI好用多了。

先上个实例,我这参考了文章

http://blog.csdn.net/shadowsick/article/details/9101477#comments

我按照此文实现了JNA的第一个程序。

但是当我把这个程序拷到64位主机上再运行就会报错:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'test': 找不到指定的模块。

于是问题来了不同位数的dll如何兼容呢?

我又做了一个64位的test.dll对不同主机,dll,jdk位数进行了测试结果如下:

主机 dll jdk 可行
32位 32位 32位 1
32位 64位 32位
64位 32位 32位 1
64位 64位 32位
64位 32位 64位
64位 64位 64位 1

结论:dll可否调用与jdk位数有关,需要一致才行。

以下是过程

1.根据参考文章制作了32位的dll:testx86.dll,内含一个用c语言写的add(int a,int b)。

2.用vs2010再制作一个64位的dll,过程十分简单,用vs2010打开先前制作了32位的dll源码,选择编译平台为64位再输出即可。

3.略微根据修改参考文章所写的代码使其便于测试。

4.结果见上表,另附源码在百度云盘:http://pan.baidu.com/s/1mhaOhWO