JAVA 使用 JNI/JNA WINDOWS API (DLL)案列
时间: 2023-09-18 22:08:12 浏览: 65
以下是一个使用 JNI 调用 Windows API 的示例代码:
首先,我们需要编写一个 C 文件,实现我们需要调用的 Windows API 函数,并将其编译成 DLL。例如,我们需要调用 MessageBoxA 函数,可以编写以下代码:
```
#include <windows.h>
#include <stdio.h>
#include "jni.h"
JNIEXPORT void JNICALL Java_com_example_MessageBox_messageBox(JNIEnv* env, jobject obj, jstring message) {
const char* utfMessage = (*env)->GetStringUTFChars(env, message, NULL);
MessageBoxA(NULL, utfMessage, "Message", MB_OK | MB_ICONINFORMATION);
(*env)->ReleaseStringUTFChars(env, message, utfMessage);
}
```
这个函数接受一个字符串参数,调用 Windows API 的 MessageBoxA 函数,并显示消息框。
接下来,我们需要将这个 C 文件编译成 DLL。这里使用 MinGW-w64 编译器,可以使用以下命令:
```
x86_64-w64-mingw32-gcc -shared -o MessageBox.dll MessageBox.c
```
这将生成一个名为 MessageBox.dll 的 DLL 文件。
现在,我们可以在 Java 中使用 JNI 调用这个 DLL。首先,我们需要加载这个 DLL:
```
System.loadLibrary("MessageBox");
```
然后,我们可以调用这个 DLL 中的函数:
```
public class MessageBox {
static {
System.loadLibrary("MessageBox");
}
public static native void messageBox(String message);
public static void main(String[] args) {
MessageBox.messageBox("Hello from JNI!");
}
}
```
这个 Java 类中包含一个名为 messageBox 的本地方法,它调用了我们刚刚编写的 C 函数。在 main 方法中,我们调用这个本地方法,传入一个字符串参数,这个字符串将被显示在消息框中。
这样,我们就完成了使用 JNI 调用 Windows API 的示例。需要注意的是,这个示例中使用了 MinGW-w64 编译器,如果使用其他编译器,可能需要进行相应的调整。