java 调用外部api_从Java调用Win32 API方法

本文介绍如何从Java程序中调用Win32 API。首先在Java类中定义一个native方法,然后使用`javah`命令生成C源文件和头文件。接着编译C文件为DLL动态链接库,最后在Java中使用`System.loadLibrary`加载DLL。通过这个过程,Java可以顺利调用Win32 API进行系统级别的交互。
摘要由CSDN通过智能技术生成

我刚才不得不这样做。 你需要一个C编译器和Windows头文件。 我使用了mingw,因为它是免费的,我只编译一个小文件。

首先你要上课 这里是一个例子:

package org.whatever.thingy; public class MyClass { // Here is a JNI method, identified by 'native' public static native callWin32Thingy(int x, int y, boolean z); /* At this point, normal class stuff, other methods, variables, whatever */ }

然后使用JDK中的一个命令,该命令将自动将您的类和生成.h和.c文件。 该命令是“javah”。 方法签名看起来像这样:

JNIEXPORT void JNICALL Java_com_whatever_1thingy_MyClass_callWin32Thingy (JNIEnv *, jclass, jint, jint, jboolean);

在.c文件中,您可以包含所需的任何窗口标题,并充实该方法。

JNIEXPORT void JNICALL Java_com_whatever_1thingy_MyClass_callWin32Thingy (JNIEnv *a, jclass b, jint c, jint d, jboolean e) { // Prep steps.... Win32MethodCallWeCareAbout(x, y, z, hWhatever); // Cleanup stuff... }

不要重命名方法,这是非常重要的,这是如何与你的具体类相关联。

一旦你有了,你将这些文件编译成一个DLL。 这里是我用于mingw的命令,你将不得不调整类/path/等。

c:/MinGW/bin/gcc -c -Ic:/MinGW/include -I"c:/Program Files/Java/jdk1.5.0_12/include" -I"c:/Program Files/Java/jdk1.5.0_12/include/win32" -D__int64="long long" com_whatever_thingy_MyClass_JNIHelper.c c:/MinGW/bin/gcc -shared -o JNIHelper.dll com_whatever_thingy_MyClass_JNIHelper_JNIHelper.o -Wl,--add-stdcall-alias,--kill-at,--output-def,def_file

这将产生一些文件,包括JNIHelper.dll,这就是我命名我的DL​​L。

在这一点上,你基本上完成了。 正常使用Java类,当您调用静态方法时,它将运行您的Win32代码。 所有你需要做的是导入图书馆。 在你的代码中的某处(我把它放在我的类的一个静态块中),你需要这一行:

System.loadLibrary("JNIHelper");

这将导致Java加载名为“JNIHelper.dll”的库并将其链接到代码中。 它必须位于Java知道的图书馆path的某个地方。

而已。 这是一堆样板,但如果你做一些简单的包装,很容易。 如果你不得不处理Javatypes或分配内存,情况会变得更糟(注意:我没有,所以我没有经验)。

这里有一个完整的教程(首先我今天发现,看起来很不错,你可以在网上find其他人, 维基百科关于JNI的文章也有更多的信息。

希望这可以帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值