1、下载jawin:
http://jawinproject.sourceforge.net/。
2、配置:
》将jawin.jar放于%JAVA_HOME%\jre\lib\ext下 。
》将jawin.dll放于c:\winnt\system32下。否则将出现错误:COMException : no jawin in java.library.path;
也可将jawin.dll放于每个项目目录下。
》至此在Editplus中调试Jawin/NJawin的例子,可以通过。 而在Eclipse中有时还会出上面的错误:COMException : no jawin in java.library.path。
》在Eclipse中,菜单->window->preference->Java->installed JREs 将原来的remove,重新建一个指到你的java sdk目录。
》 ok了。
3、程序测试:
import org.jawin.funcptr;
import org.jawin.returnflags;
public class createppt {
public static void main(string[] args) {
try {
funcptr msgbox = new funcptr("user32.dll", "messageboxw"); //获得函数指针
msgbox.invoke(0, "hello from a dll", "from jawin", 0, returnflags.fail_on_false);
/*1. 指令字符串。一个"XXX:Y:ZZZ"格式的字符串。其含义分别是传入参数中的每个字节的数据类型意义、返回值的类型、需要从传入指针中读取的数据(inout类型参数)。比如:
函数签名int func(int, int, struct s*, char*); //其中struct s*调用完函数后需要读出,struct s所占字节数为16。
其指令字符串为:IIP16G:I:L4L4n16L4。该字符串在解析返回值(字节数组)时,首先应该是返回类型I对应的4个字节,然后是inout类型的参数中n16对应的16个字节。
其中字符串的意义可以在Jawin提供的文件instructions.h中找到,或者在官方文档(Jawin数据指令)中找到常用的一些指令字符串的意义。
2. 传入参数的总字节大小。
3. 前面写好的传入参数的原始字节流。
4. 一个object数组。
5. ReturnFlags,用以根据C/C++返回值将C/C++的错误转换为Java的异常并抛出。其中CHECK_NONE表示不检查;CHECK_FALSE和CHECK_WIN32分别表示返回0是FALSE和SUCCESS,根据是否出错决定是否抛出异常;CHECK_HRESULT表示使用COM模型中的HRESULT作为返回值,其错误码可以配置。
*/
} catch (exception e) {
e.printstacktrace();
}
Jawin的使用步骤:
1.环境配置:下载Jawin;Jawin.dll放入工程目录下;Jawin.jar相关jar文件加入到运行库中(LibPath或者Eclipse下配置工程的BuildPath-AddLibrary)。
2.获得函数指针:new FuncPtr("DllFileName.DLL", "dllFunctionName");
3.用LittleEndianOutputStream将函数需要的参数写入到一个原始字节流NakedByteStream。
4.最重要的一步:调用FuncPtr.invoke()。传入参数比较复杂。
5.解析上一步的返回值(字节数组)。
第4步中传入的参数包括:
1.指令字符串。一个"XXX:Y:ZZZ"格式的字符串。其含义分别是传入参数中的每个字节的数据类型意义、返回值的类型、需要从传入指针中读取的数据(inout类型参数)。比如:
函数签名int func(int, int, struct s*, char*); //其中struct s*调用完函数后需要读出,struct s所占字节数为16。
其指令字符串为:IIP16G:I:L4L4n16L4。该字符串在解析返回值(字节数组)时,首先应该是返回类型I对应的4个字节,然后是inout类型的参数中n16对应的16个字节。
其中字符串的意义可以在Jawin提供的文件instructions.h中找到,或者在官方文档(Jawin数据指令)中找到常用的一些指令字符串的意义。
2.传入参数的总字节大小。
3.前面写好的传入参数的原始字节流。
4.一个object数组。
5.ReturnFlags,用以根据C/C++返回值将C/C++的错误转换为Java的异常并抛出。其中CHECK_NONE表示不检查;CHECK_FALSE和CHECK_WIN32分别表示返回0是FALSE和SUCCESS,根据是否出错决定是否抛出异常;CHECK_HRESULT表示使用COM模型中的HRESULT作为返回值,其错误码可以配置。
使用Jawin的缺点:不方便调试,几乎所有的错误都抛出同样的异常COMException;需要对数据类型的转换比较了解;不能跨平台,对Windows的依赖性比较强。
使用Jawin的优点:方便使用,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。
用 java调用dll的工具非常方便
jawin.dll可以对dll中的方法进行调用,也可以调用com中的方法.
jawin主要是用来和COM打交道的.
内部还提供了一个工具,直接对 com组件导出成 java的类,个人认为很方便.
Java调用Win API的事,回来查了下,SUN官方提供的JNI调用时还要自己生成头文件,对已有的DLL再次进行封装。需要对C++非常熟悉,因为要写C++代码。不过还好还有另一种解决方案——Jawin。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shendaiming/archive/2009/11/12/4801828.aspx
分享到:
相关推荐
jawin.jar包含了Java接口,jawin.dll则是Java与DLL交互的桥梁,它实现了Java和C/C++之间的互操作性,使得Java程序员可以方便地调用DLL中的函数。 首先,我们需要理解Java与DLL交互的基本概念。在Java中,我们通常...
本篇文章将详细探讨如何使用JAWIN和JCOB这两个库在Java中调用DLL文件。 JAWIN(Java to Windows Interface)是一个开源项目,它的主要目标是提供一种方式,使得Java程序能够直接与Windows API进行交互。JAWIN通过...
本篇文章将详细探讨如何在Java中使用JAWIN库来调用DLL文件,以及这个过程中的关键知识点。 JAWIN 是一个开源项目,它为Java提供了一种简单的方式来访问Windows API和DLL函数。它通过JNI(Java Native Interface)...
很不错的组件。可以在JAVA里调用Win32组件
标题中的“vb6、c#、java的jawin-2.0调用c#做的dll”涉及到了跨语言调用的技术,主要集中在VB6、C#和Java之间如何通过DLL(动态链接库)进行交互。这是一个重要的软件开发课题,因为不同编程语言之间的互操作性有助...
Java调用Win API,通常指的是在Java程序中利用Windows操作系统提供的功能接口,这些接口通常以动态链接库(DLL)的形式存在。为了实现这样的调用,开发者通常会使用JNI(Java Native Interface),这是一个允许Java...
Jawin的核心是一个Java库,它提供了一种桥接机制,使得Java应用程序能够通过JNI(Java Native Interface)直接调用DLL中的函数,同时支持COM对象的创建、方法调用和属性访问。这种方式使得Java开发者可以利用丰富的...
标题中的"java调用dll/com组件word excel使用jawin架包"涉及到的技术点主要包含以下几个方面: 1. **Java Native Interface (JNI)**: JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。当...
Jawin 是一个 Java 绑定库,用于调用 Windows 的本地 DLL 文件,使得在 Java 应用程序中可以利用到原生 Windows 功能。本文将根据给定的“jawin使用步骤.txt”文件,详细介绍如何在 Java 环境下配置并使用 Jawin。 ...
JAWIN库是本文中提到的JAVA调用DLL的方法,它提供了一种桥接,使得JAVA程序能够像操作JAVA类一样调用DLL中的函数。开发者需要定义接口,该接口对应DLL中的函数签名,然后使用JAWIN库加载DLL并实例化接口,从而调用...
Jawin项目就是为了满足这种需求而出现的,它提供了一个解决方案,使得Java开发者能够轻松地在Java应用中调用Windows平台上的动态链接库(DLL)函数。 Jawin的核心思想是通过JNI(Java Native Interface)来实现Java...
这通常是因为JAWIN的动态链接库(`jawin.dll`)没有被正确地加载到Java的类路径中。 - 解决方案:确认`jawin.dll`是否位于正确的目录,并且该目录是否已经在`java.library.path`中。如果是在EditPlus或者Eclipse等IDE...
Jawin的使用对于那些希望在Java应用程序中利用现有Windows系统资源的开发者来说,是一个强大的工具。然而,需要注意的是,由于DLL和COM组件通常不遵循Java的跨平台性,因此使用Jawin可能限制了程序的移植性。此外,...
4. **示例代码解析**:压缩包中的源码提供了具体的示例,展示了如何使用Jawin加载DLL,调用DLL中的函数,以及如何创建和操作COM对象。通过分析这些示例,开发者可以快速理解和掌握Jawin的使用方法。 5. **应用领域*...
Jawin项目的使用极大地扩展了Java的应用范围,使得开发者可以在Java环境中利用丰富的Windows原生功能,同时保持Java的跨平台性。但需要注意的是,由于依赖于特定的操作系统,Jawin不适用于非Windows环境,如Linux或...
1. **jawin框架**:Java调用Windows DLL的工具,它提供了一种在Java中直接调用Windows API的方法,使得Java开发者可以利用Windows系统的特性和功能。 2. **DLL调用**:理解DLL的工作原理和调用规范,如函数签名、...
基本上覆盖了目前主流的开发语言,DLL使用C++编写,演示了VB、C++、DELPHI、JAVA、C#、汇编、易语言调用这个DLL的方法。有些语言我提供了静态和动态2种调用方法。没有写的恕我孤陋寡闻,如果谁知道请联系我QQ:...
4. **示例应用**:例如,如果有一个DLL文件包含了一个计算圆面积的函数,开发者可以使用Jawin创建一个Java接口,通过JNI调用DLL中的函数,实现Java代码计算圆面积的功能。对于COM组件,如Microsoft Office的自动化...
5. 在Java中调用:在Java代码中通过Jawin库调用本地方法,从而间接调用到Windows API。 Jawin库的优势在于: - 简化了Java与Windows API的交互,避免了使用复杂的JNI直接编程。 - 提供了一套完整的封装,使得调用...
通过理解Jawin的工作原理和使用方法,开发者可以更有效地整合Java和Windows生态中的资源,充分利用两者的优势。在实际项目中,Jawin可以帮助开发者实现跨平台应用的无缝集成,提升软件的可维护性和可扩展性。