Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4485476
  • 博文数量: 192
  • 博客积分: 10014
  • 博客等级: 上将
  • 技术积分: 8232
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-21 00:22
文章分类

全部博文(192)

文章存档

2011年(4)

2009年(14)

2008年(174)

我的朋友

分类: Java

2008-05-26 16:00:26

 
Jawin(Java/Win32)是一个免费的、开放源代码的体系结构,用于 Java 组件和通过 Windows COM 对象或 Windows DLL 来公开的组件之间的互操作。Jawin 允许 Java 应用程序调用任何基于 COM 或 DLL 的遗留代码,而不需要编写任何 JNI 代码。您的代码将能与诸如 Microsoft Office 套件等可编写脚本的应用程序交互,调用诸如 Microsoft 的基于 COM 的 XML 解析器和工具等可编写脚本的逻辑组件,以及访问诸如 Windows 注册表、安全 API 和事件日志等 Win32 API 特性。Jawin 包括一个用于可编写脚本的 COM 组件的代码生成器。该代码生成器读取类型库,并自动产生从 Java 应用程序调用该组件所需要的Java存根(stub)。
 
使用方法:
解压后,将bin/jawin.dll拷贝到System32目录下,然后将lib/jawin.jar和lib/jawin-stubs.jar拷贝到jdk的lib/ext目录下
 
好现在就可以运行其自带的demo了~
 
 

/*
 * HelloDll.java -
 *
 * This file is part of the Jawin Project:
 *
 * Please consult the LICENSE file in the project root directory,
 * or at the project site before using this software.
 */

/* $Id: HelloDll.java,v 1.3 2004/06/14 20:16:38 arosii_moa Exp $ */
package demos;
import org.jawin.COMException;
import org.jawin.FuncPtr;
import org.jawin.ReturnFlags;
/**
 * Demo that uses the Win32 MessageBoxW API-method.
 *
 * @version $Revision: 1.3 $
 * @author Stuart Halloway, http://www.relevancellc.com/halloway/weblog/
 */

public class HelloDll {
 public static void main(String[] args) throws Exception {
  FuncPtr msgBox = null;
  try {
   msgBox = new FuncPtr("USER32.DLL", "MessageBoxW");
   msgBox.invoke_I(0, "Hello From a DLL", "From Jawin", 0, ReturnFlags.CHECK_FALSE);
  } catch (COMException e) {
   // handle exception

   e.printStackTrace();
   throw e;
  } finally {
   if (msgBox != null) {
    try {
     msgBox.close();
    } catch (COMException e) {
     // handle fatal exception

     e.printStackTrace();
     throw e;
    }
   }
  }
 }
}

注意运行是 要加demos.HelloDll
 
 
  1. /*1.     指令字符串。一个"XXX:Y:ZZZ"格式的字符串。其含义分别是传入参数中的每个字节的数据类型意义、返回值的类型、需要从传入指针中读取的数据(inout类型参数)。比如:  
  2. 函数签名int func(int, int, struct s*, char*); //其中struct s*调用完函数后需要读出,struct s所占字节数为16。  
  3. 其指令字符串为:IIP16G:I:L4L4n16L4。该字符串在解析返回值(字节数组)时,首先应该是返回类型I对应的4个字节,然后是inout类型的参数中n16对应的16个字节。  
  4. 其中字符串的意义可以在Jawin提供的文件instructions.h中找到,或者在官方文档(Jawin数据指令)中找到常用的一些指令字符串的意义。  
  5. 2.     传入参数的总字节大小。  
  6. 3.     前面写好的传入参数的原始字节流。  
  7. 4.     一个object数组。  
  8. 5.     ReturnFlags,用以根据C/C++返回值将C/C++的错误转换为Java的异常并抛出。其中CHECK_NONE表示不检查;CHECK_FALSE和CHECK_WIN32分别表示返回0是FALSE和SUCCESS,根据是否出错决定是否抛出异常;CHECK_HRESULT表示使用COM模型中的HRESULT作为返回值,其错误码可以配置。  
  9. */  
阅读(1453) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~