java 调 dll 动态连接库以及java回调函数在dll中的应用

最近一个偶然的项目需要用到了java以使用java来调用vs 2005的动态库,先前只是在网上看到过了这方面的一些知识,总体上好像有三种方法,我没有各个方法都测试一下,在这里我主要讲的是JNative的使用方法,我们得感谢JNative的发布者,这个jar的发布让我们调用dll动态链接库方便了很多很多,,而且相对来说都是很简单的。

这里先简单的说一下JNative的rar包,我是从网上搜多一下,最后是在csdn的网站里找到下载的rar包,我用的版本是JNative-1.3.2,压缩包里共有三个文件:JNative.jar、JNativeCpp.dll、libJNativeCpp.so,这三个文件其中有两个是分别在不同系统中用到的,相信我不用说也应该知道dll是在windows系统下,so是在linux系统下。而最主要的就是使用jar包了,这个包里面包含了很多函数,我使用的开发环境是NetbeansIDE集成开发环境,我将jar包导入库中通过打开可以看到jar包中包含了很多的的包,如下图所示:

以上就是JNative中的包,有兴趣的你可以一一点击开查看其中每个包中的类函数。

下面我要说的是如何去在windows系统下如何去配置环境,和如何使用dll。首先我们将解压的JNativeCpp.dll放到系统windows/System32文件夹下,然后让JNative.jar放到你的安装java JDK的jre/lib/ext下,使用Netbeans添加jar库,这样就可以使用JNative了,相信你应该看懂了吧,我 已经说的很具体了,如果看不懂那你就不适合使用java开发了。

参数”) 后面类推有几个参数写几个参数 最后使用 n. invoke(),这样就编译源程序,然后执行源程序就可以了。

以上介绍的是一般常用到的java调用dll的用法,大家注意的题目还有关于dll中存在回调函数的问题,我相信大家应该知道java中是没有指针的,而恰恰在回调函数用到的就是函数的指针,这种与java中的无指针用法矛盾了,其实我们应该感谢JNative的作者,他已经想到了如何在JNative中使用java回调函数,要在dll中使用java的回调函数首先就要编写java回调函数java的回调函数是有固定的模板,其实也是在JNative包中。请看下面的代码

就是回调函数中参数返回回调函数地址 public int getCallbackAddress() throws NativeException { // TODO Auto-generated method stub return JNative.createCallback(2, this); } }

以上就是java回调函数,其中你的回调函数内容的处理就是在函数public int callback(long[] values)中,这里我要将的是对接收到参数的处理和解析,如果回调函数是普通的数据类型,那么只要是使用JNative中函数从values地址中取值就可以了,下面我着重要说的就是如何使用pointer java指针来读取c中的类型指针,使用Pointer 来new一块内存空间,但是new的这个块内存空间要是在values地址下的。Pointer _pointer = new Pointer(new NativeMemoryBlock((int)values[0],100));以后要解析的指针内的内容就都在_pointer里了。这里你要仔细的去看Pointer包里的函数才能解析出你要的内容来。

这就是我在这个项目中使用java来调用vs 2005动态库的一点点经验,拿出来分享一下,一直以来都是写博客的,后来由于太懒惰了很多的技术文档资料都没写出来了,从这里开始我会逐步的整理技术文档,将自己的一些技术问题拿出来供大家分享和修改,并且在这里哈佛小丸子愿我们能够拿出更多的技术来分享。。。。

你所缺少的部分,也早已被我用想像的画笔填满。

java 调 dll 动态连接库以及java回调函数在dll中的应用

相关文章:

你感兴趣的文章:

标签云: