概述
我不得不这样做一会儿前。你需要一个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的命令,你必须调整类/路径/等。
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,这就是我命名我的DLL。
在这一点上,你基本上完成了。您正常使用Java类,并在调用静态方法时运行Win32代码。你所要做的就是导入库。某处在你的代码(我把它放在一个静态块在我的课),你需要这条线:
System.loadLibrary("JNIHelper");
这将导致Java来加载一个名为“JNIHelper.dll”库,并将其链接到代码。它必须位于Java知道的图书馆路径的某个地方。
就是这样。这是一堆样板,但如果你正在做一些简单的包装,很容易。如果你不得不处理Java类型或分配内存,情况会变得更糟(注意:我没有,所以我没有经验)。
有一个完整的教程here(第一,我发现今天看起来体面的,你可以在网络上找到他人。在Wikipedia文章JNI有更多的信息了。
希望这有助于。
最后
以上就是老实枕头为你收集整理的java调用win32_从Java调用Win32 API方法的全部内容,希望文章能够帮你解决java调用win32_从Java调用Win32 API方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复