java通过jna调用c++/c的.dll/.so库接口
1。通过jni技术可以实现java调用so文件(这个自己实现了,以前的日志也有,并没有用jni来调用dll文件,原因是自己对这个不熟啊,不知道怎样生成dll文件。)。
2.使用jni的时候会显得很繁琐,因为要有许多函数的声明要相同,jna技术就可以省却这一点,拿到一个现成的dll,只要知道函数声明,就可以直接调用了(用jna还未实验调用so文件)。下面介绍一下jna调用dll的过程。1.导入jna.jar包,这个就不说了,下载一个就可以了。
2.主要代码:
import com.sun.jna.Library;import com.sun.jna.Native;public interface Net extends Library { Net lib = (Net)Native.loadLibrary("NetDvr2", Net.class); int NETDVR_startup();}//调用public class TestJna { public static void main(String[] args) { System.out.println(Net.lib.NETDVR_startup()); }}NetDvr2.dll放在工程的根目录下边即可。可能出现的错误:
java.lang.UnsatisfiedLinkError: Unable to load library 'NetDvr2': ???????¨
原因是NetDvr2.dll(或者NetDvr2.so)还依赖于其他几个dll(so)文件,把他们一起拷到该java工程的根目录就行了。
查看一个dll文件所依赖的dll文件可以用Depends.exe。
需要以上任何文件的可以邮件我或留言。
1。通过jni技术可以实现java调用so文件(这个自己实现了,以前的日志也有,并没有用jni来调用dll文件,原因是自己对这个不熟啊,不知道怎样生成dll文件。)。
2.使用jni的时候会显得很繁琐,因为要有许多函数的声明要相同,jna技术就可以省却这一点,拿到一个现成的dll,只要知道函数声明,就可以直接调用了(用jna还未实验调用so文件)。下面介绍一下jna调用dll的过程。1.导入jna.jar包,这个就不说了,下载一个就可以了。
2.主要代码:
import com.sun.jna.Library;import com.sun.jna.Native;public interface Net extends Library { Net lib = (Net)Native.loadLibrary("NetDvr2", Net.class); int NETDVR_startup();}//调用public class TestJna { public static void main(String[] args) { System.out.println(Net.lib.NETDVR_startup()); }}NetDvr2.dll放在工程的根目录下边即可。可能出现的错误:
java.lang.UnsatisfiedLinkError: Unable to load library 'NetDvr2': ???????¨
原因是NetDvr2.dll(或者NetDvr2.so)还依赖于其他几个dll(so)文件,把他们一起拷到该java工程的根目录就行了。
查看一个dll文件所依赖的dll文件可以用Depends.exe。
需要以上任何文件的可以邮件我或留言。
解决方案 »
- 我想问下成员变量在内存分析的时候是在哪块???
- 【Debug调试】为什么在创建对象的语句上调试就出错
- prepareStatement模糊查询,模糊查询,模糊查询,模糊查询,
- java 正则表达式
- 大侠们来看看撒,怎么结束被接收键盘输入的方法阻塞的线程啊?急,急,急啊!!
- java 里面如果屏蔽组合键例如Ctrl+A全选之类的键
- LRU算法
- 请各位真正懂得java语法的朋友进来指点一二,谢谢!!
- 怎样分割图片??
- ad hoc query怎么翻译?是什么英文的缩写?
- 请教一个Swing Socket编程技术上的程序“UncaughtException”异常的处理方法.
- td 背景图像不显示 求大神门帮我看一下
百度下jna引用C++吧,再不行把接口引用代码贴出来看看(如代码可以放开,不涉及机密)。
1.我自己生成的dll文件还依赖于其他几个dll文件,他们都是系统里的dll文件。如何只调用我的dll文件,然后让编译器自己搜索本地系统把其他的dll调用起来?而不是把他们一起拷到该java工程的根目录。我只想烤我自己的dll文件到Java工程的跟目录下,其他都不想拷进来。
2.我根据楼主的方式,也拷进其他的依赖的dll文件了,但依然报错:A fatal error has been detected by the Java Runtime Environment:EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6b602b86,pid=5912,tid=5980JRE version:7.0_25-b17
Java VM:Java HotSpot(TM) Client VM (23.25-b01 mixed mode,sharing windows-x86)
Problematic frame:
C [pthreadVC2.dll+0x2b86] pthread_mutex_unlock+0x16Failed to write core dump.Minidumps are not enabled by default on client versions of Windows求指导
这个有引用的关系需要放到一起的了,就把c++或者c语言的包(linux对应的.so或window对应的.dll文件)当中.jar包使用就可以了。看了你的报错,说的是VM运行环境异常。常见的VM运行环境异常有,64位的JDK装到了32位的window下或者64位的PC安装了32位的JDK.