`

关于Java 加载dll

 
阅读更多

   最新写了一个关于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());方式加载。

 

 

 

 

 

  • 大小: 17.6 KB
分享到:
评论

相关推荐

    Java加载dll,导致Java进程内存泄露

    标题“Java加载dll,导致Java进程内存泄露”涉及到的是Java平台与本地库(DLL)交互时可能出现的问题。在Java中,通过Java Native Interface (JNI) 可以调用C/C++编写的动态链接库(DLL),实现Java代码与本地代码的...

    Java调用dll实现des加密解密

    4. **加载DLL和调用方法**: 在Java代码中,使用`System.loadLibrary`加载本地库,然后可以调用`DesUtil.encrypt`和`DesUtil.decrypt`进行DES加密解密。 ```java public class Main { public static void main...

    java 加载dll 异常,包含调试运行和打jar

    java 加载dll 异常,包含调试运行和打jar 可以参考https://blog.csdn.net/ADdhtfdhdg/article/details/108754087

    亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。

    3. **加载DLL**:使用`LibraryLoader`或自定义`NativeLibrary`实例加载DLL文件。 4. **调用DLL函数**:通过接口实例调用DLL中的函数,传递必要的参数,包括回调函数接口实例。 5. **处理回调**:在定义的回调函数...

    Windows环境下Java加载DLL.docx

    ### Windows环境下Java加载DLL #### 一、概述 在Windows环境下使用Java程序调用本地动态链接库(Dynamic Link Library,简称DLL)是一项常见的需求。Java提供了多种方式来加载DLL文件,以便实现与本地代码的交互。...

    java调用dll必备jar包

    - **加载DLL**:使用JNative库提供的API,如`JLibrary.loadLibrary()`,加载DLL文件。确保DLL文件与Java应用程序在同一目录下,或者指定正确的路径。 - **定义本地方法**:在DLL的C/C++代码中,实现与Java中声明的...

    Java调用动态链接库(Java 调用 DLL)

    5. 在Java程序中编译并运行,Java会自动加载DLL并调用native方法。 除了JNI,还可以使用JNA库来调用DLL。JNA是一种更高级、更易用的接口,它允许Java直接映射到DLL中的函数,而无需编写本地代码。使用JNA时,你只...

    Java调用DLL源代码

    3. **加载DLL**:使用`Native.loadLibrary`方法加载DLL库,传入DLL的名称和定义接口的类。 4. **调用函数**:现在你可以像调用Java方法一样调用DLL中的函数了。 示例代码: ```java public interface MyDLL ...

    java调用DLL文件

    总结来说,Java调用DLL文件主要依赖于JNative库,通过定义Java接口、加载DLL、获取函数句柄、创建代理对象以及调用函数等步骤实现。这种方法使得Java开发者能够充分利用C/C++库的功能,同时也保持了Java的跨平台特性...

    JAVA调用DLL方法 JAVA调用DLL方

    ### JAVA调用DLL方法 在跨平台开发领域中,Java作为一种强大的编程语言,因其具有良好的移植性和跨平台性而被广泛使用。然而,在某些特定情况下,我们可能需要调用本地库(例如DLL文件)来实现特定功能或提高性能。...

    msjava.dll 完整版

    **msjava.dll 文件详解** msjava.dll 是一个关键的动态链接库(DLL)文件,它在微软的操作系统中起着核心作用。...了解并掌握关于msjava.dll的知识,有助于我们更好地理解和处理系统中的Java相关问题。

    java与dll的交互

    - `System.loadLibrary()`:这是Java中加载DLL的主要方法,它会查找系统路径下的相应DLL文件。如果DLL不在系统路径中,需要手动指定完整路径。 2. **创建DLL** - 使用C++ IDE(如Visual Studio)或命令行工具(如...

    java调用dll新

    创建一个Java类,声明native方法,并使用`System.loadLibrary`加载DLL。 ```java public class DllCall { static { System.loadLibrary("myDll"); } public native int add(int a, int b); public ...

    java调用dll接口

    3. **加载DLL**:使用`Library`接口的`Util.loadLibrary`方法加载DLL。例如,对于名为`myDll`的DLL,可以写成`LibraryLoader.loadLibrary("myDll")`。 4. **实现DLL接口**:JNA会自动将Java接口映射到DLL中的相应...

    Java调用dll示例

    总结来说,Java调用DLL主要涉及JNI的使用,包括在Java中声明native方法,生成JNI头文件,编写C++代码实现接口,编译链接DLL,以及在Java中加载和调用DLL。这个过程允许Java开发者充分利用C++的高性能特性,同时保持...

    JAVA利用JNA调用DLL

    在Java编程环境中,有时我们需要与操作系统底层功能进行交互,例如调用C语言编写的动态链接库(DLL)函数。在这种情况下,Java Native Access (JNA) 提供了一个强大的解决方案。JNA 是一个Java库,允许Java代码直接...

Global site tag (gtag.js) - Google Analytics