Java调用Win API

本文介绍如何使用Jawin项目让Java程序调用DLL文件,包括设置环境、编写及运行示例代码的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方网站:http://jawinproject.sourceforge.net

把lib文件夹下的jawin.jar和jawin-stubs.jar放到%JAVA_HOME%/jre/lib/ext 目录下 把bin文件夹下的jawin.dll放到%SystemRoot%/System32 目录下

然后就可以运行demo下的Hellodll.java了:

/* * HelloDll.java - * * This file is part of the Jawin Project: http://jawinproject.sourceforge.net/ * * 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;      }     }    } } }

调用自己写的dll:

import org.jawin.COMException; import org.jawin.FuncPtr; import org.jawin.ReturnFlags;

public class nativeDll { public static void main(String[] args) throws Exception {    int result1,result2;    FuncPtr test1 = null;    FuncPtr test2 = null;    try {     test1 = new FuncPtr("demo.dll", "test1");     test2 = new FuncPtr("demo.dll", "test2");     result1 = test1.invoke_I(5, 6, ReturnFlags.CHECK_NONE);     result2 = test2.invoke_I(5, 6, ReturnFlags.CHECK_NONE);     System.out.println("5 plus 6 is " + result1);     System.out.println("5 multiply 6 is " + result2);    } catch (COMException e) {     e.printStackTrace();    } finally {     if (test1 != null) {      try {       test1.close();      } catch (COMException e) {       e.printStackTrace();      }     }     if (test2 != null) {      try {       test2.close();      } catch (COMException e) {       e.printStackTrace();      }     }    } } }

命令行运行:javac nativeDll.java java -classpath ".;%JAVA_HOME%/jre/lib/ext/jawin.jar" nativeDll

注意,这里一定要加-classpath ".;%JAVA_HOME%/jre/lib/ext/jawin.jar" 不然会提示

Exception in thread "main" java.lang.NoClassDefFoundError: org/jawin/COMExceptio n Caused by: java.lang.ClassNotFoundException: org.jawin.COMException         at java.net.URLClassLoader$1.run(Unknown Source)         at java.security.AccessController.doPrivileged(Native Method)         at java.net.URLClassLoader.findClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         at java.lang.ClassLoader.loadClassInternal(Unknown Source)

特别注意".;",不加的话会提示

Exception in thread "main" java.lang.NoClassDefFoundError: nativeDll Caused by: java.lang.ClassNotFoundException: nativeDll         at java.net.URLClassLoader$1.run(Unknown Source)         at java.security.AccessController.doPrivileged(Native Method)         at java.net.URLClassLoader.findClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         at java.lang.ClassLoader.loadClassInternal(Unknown Source)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷月宫主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值