最新写了一个关于Foxbpm设计器插件使用SQLite数据库,有关Foxbpm设计器插件详情请参考github官方https://github.com/FoxBPM/FoxBPM-Designer
期初在网上下载了一个SQLite的jar和一个dll,发现Foxbpm设计器插件如果要使用SQLite,就要让插件能够加载到该dll,而且根据项目要求该dll最终是要放到插件包中,这样就有遇到一个问题,如何让Eclipse插件加载jar包中dll,后来在网上搜索”关于Eclipse插件加载dll"
(http://hi.baidu.com/eulxzyvuetaluve/item/d8b6901f57c9074be65e065b),发现可以在以相对plugin根目录的指定目录(ws/win32.os/win32/x86,os/win32/,nl/zh/CN,nl/zh/)中放置dll就可以了实现自动加载,但是我们这个Foxbpm设计器插件是要面向多系统的,刚开始在windows下我在Foxbpm设计器插件根目录下创建os/win32,并将dll文件放置该目录通过System.loadLibrary("sqlite_jni");是可以加载成功,但是发现在mac系统上不知道如何在Foxbpm设计器插件根目录的指定相应目录了。
最后直接到SQLite官方(http://www.sqlite.org/download.html)下载一个包含dll的驱动包sqlite-jdbc4-3.8.2-SNAPSHOT,里面包含windows,mac,liunx系统下的dll文件,从而实现了Foxbpm设计器在mac系统下使用SQLite数据库
最后自己总结了下java加载dll
1、在java.library.path(加载库时搜索的路径列表)下加载dll
//加载java.library.path下的dll
System.loadLibrary("WindowsCommand");
注意不需要带上文件名后缀
2、在绝对目录下加载dll
//加载d:\\目录下的dll
System.load("d:\\WindowsCommand.dll");
注意需要带上文件全路径
3、下面介绍一种,如何加载jar中的dll
InputStream in = null; OutputStream out = null; try { URL url = TestLoadDll.class.getClassLoader().getResource("WindowsCommand.dll"); if (null != url) { File f = new File(url.toURI()); String tempPath = System.getProperty("java.io.tmpdir"); // 将jar包中的dll资源,在默认的临时文件路径下重新生成dll文件 File tempFile = new File(tempPath + "hello.dll"); in = url.openStream(); out = new FileOutputStream(tempFile); byte[] bytes = new byte[1024]; while (in.read(bytes) != -1) { out.write(bytes); } out.flush(); out.close(); // System.getProperty("java.io.tmpdir");临时目录下加载dll System.load(tempFile.getAbsolutePath()); } } catch (Exception e) { } finally { if (null != in) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != out) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } }
以上代码在我本机执行,会在C:\Users\yangguang\AppData\Local\Temp目录下生成hello.dll文件
上面代码思想是,首先将通过类加载器获取包中dll资源,同时在 java.io.tmpdir临时目录下生成hello.dll文件,然后将获取的dll资源写入生成的临时文件中,最后通过System.load(tempFile.getAbsolutePath());方式加载。
相关推荐
NULL 博文链接:https://cyj86.iteye.com/blog/1095213
java 加载dll 异常,包含调试运行和打jar 可以参考https://blog.csdn.net/ADdhtfdhdg/article/details/108754087
Java调用动态链接库 Java 调用 DLL 源码
Windows环境下Java加载DLL.docx
亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。
JNI基本实现过程,快速了解java与c如何交互,为从事ndk开发迈出一步!
excel加载dll
NULL 博文链接:https://microjava.iteye.com/blog/545645
java 调用第三方DLL readWriteCard.cpp
java 调用 opencv处理图像时所需的dll文件 将文件放在工程根目录,在程序开始时加载下面的语句 String relativelyPath = System.getProperty("user.dir"); System.load(relativelyPath + "\\opencv_java340-x64....
java获取dll动态库源码分享。通过jna加载动态库,然后初始化动态库,打开动态库,在通过指针获取动态库里面的数据。
虹软加载不到dll文件的解决.txt
我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦...使用 JNA ,不需要再编写适配用的 .dll/.so ,只需要在 Java 中编写一个接口和一些代码,作为 .dll/.so 的代理,就可以在 Java 程序中调用 dll/so 。
java连接dll文件的驱动,jnative.jar,ClassLibrary1.dll,JNativeCpp.dll
java 载入dll之后无法切换输入法测试工程(My Eclipse)
基于PBNI和JNI的PB调用JAVA代码方案,导入项目后得到cjavavm类,支持加载JVM、在PB中创建Java对象的代理对象
Java调用GDAL的所有DLL和gdal.jar(java8 bin目录,含Java调用GDAL的DLL和gdal.jar),使用编译好的库方法,获取 tif 文件信息及GDAL方法,具体使用方法:https://blog.csdn.net/antma/article/details/89264910