Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1068458
  • 博文数量: 282
  • 博客积分: 10865
  • 博客等级: 上将
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-12 12:35
文章存档

2017年(1)

2016年(3)

2015年(10)

2014年(12)

2013年(5)

2012年(10)

2011年(29)

2010年(3)

2008年(13)

2007年(92)

2006年(104)

我的朋友

分类: Java

2006-10-12 12:20:36

最近由于项目的特殊需求,我们必须在程序调用window的dll。
开始我们用jni,后来由于调用的dll太多,而且很烦琐。所以,我们决定用开源的jawin调用。
jawin 可以对dll中的方法进行调用,也可以调用com中的方法.内部还提供了一个工具,直接对 com组件导出成 java的类,个人认为很方便。

下面是我们作的一个测试,很顺利便通过了。
1、下载jawin:。
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 的方式不需要导出了,直接调用就可以了,下面是下载的包中提供的一个例子:
     》我在win2000下,测试通过。
/*
 * Created on Dec 22, 2005
 *
 */
import org.jawin.FuncPtr;

import org.jawin.ReturnFlags;

/**
 * @author gf  mail to
 *
 * 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();

              }

       }

}

阅读(1280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~