利用jawin完成调用window中dll的调用

  [转]

Java/Win32互动项目( Jawin)是一个免费的开源软件工程,用于和微软的COM或者Win32下面的DLL文件互动。

1.可以使用Jawin与诸如微软的办公套件的可交互的脚本进行应用程序进行交互,可以获取Win32 API应用程序功能,如Windows注册表,安全APIs,甚至事件日志,可以使用Jawin处理.NET代码象处理COM对象一样。实事上,Jawin允许JAVA应用程序调用任何基于COM及DLL的代码,而不需要写任何Java本地接口(JNI)代码。使用Jawin你可以调用任何可在Windows环境下编程的组件,你也可以调用任意的COM组件或者是DLL实体指针。
2.Jawin包括一个代码生成器,Java类型查看器,支持为可脚本化或者是非脚本化的COM组件生成根代码,代码生成器读取一个或者是多个类型库,并且自动省略需要用于调用组件的JAVA根。Jawin类型查看器现在还不能为DLL实体指针生成代码,并且并不是支持所有COM组件的参数类型。

jawin 可以对dll中的方法进行调用,也可以调用com中的方法.内部还提供了一个工具,直接对 com组件导出成 java的类.
下面是我们作的一个测试,很顺利便通过了。
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、程序测试:
     》调用 dll,dll 的方式不需要导出了,直接调用就可以了,下面是下载的包中提供的一个例子:
/*
 * Created on Dec 22, 2005
 *
 */
import org.jawin.FuncPtr;
import org.jawin.ReturnFlags;

/**
 * @author gf  mail to gf@163.com
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class GfJawinTest {

       public static void main(String[] args) {
              try {
                     FuncPtr msgBox = new FuncPtr("USER32.DLL", "MessageBoxW");

            
                     msgBox.invoke_I(0, "Hello From a DLL", "From Jawin", 0, ReturnFlags.CHECK_NONE);
              } catch (Exception e) {
                     e.printStackTrace();
              }
       }
}

你可能感兴趣的:(window)