介绍
- 先简单介绍下遇到的问题,需要在web页面中增加身份证内的头像图片。头像图片已经通过身份证采集器采集并存储在Oracle数据库的blob中。但是存储的二进制数据是经过身份证采集器加密过,解码需要调用WltRS.dll的动态链接库方可把数据转换为普通图片数据。但是web项目中使用的是java,所以把调用dll遇到的问题,和解决方法记录下来。
Java调用dll动态链接库
最先尝试的是JNI的方法,由于没有时间再次写个dll,就把方法留下。
如果有一个现有的.dll/.so文件,如果使用JNI技术调用,我们首先需要另外使用C语言写一个.dll/.so共享库,使用SUN规定的数据结构替代C语言的数据结构,调用已有的dll/so中公布的函数。
然后再在Java中载入这个适配器dll/so,再编写Java native函数作为dll中函数的代理。经过2个繁琐的步骤才能在Java中调用本地代码。
因此,很少有Java程序员愿意编写调用dll/.so库中的原生函数的java程序。这也使Java语言在客户端上乏善可陈。可以说JNI是Java的一大弱点!
JNI 调用dll具体实现方法JNative调用dll
这个方法比较简单,只需要下载JNative的文件,将JNativeCpp.dll文件放入system32文件夹中(.so文件是linux使用),java项目中引用JNative.jar包即可。具体实现代码如下:
public class WltRS {
public static String GetBmp(byte[] wlt) throws NativeException, IllegalAccessException{
JNative nGetBmp = new JNative(