java鎬庝箞璋冪敤windows api
瑕佽皟鐢╓indows API锛屽彲浠ヤ娇鐢↗ava鐨凧NI锛圝ava Native Interface锛夋潵瀹炵幇銆?/p>
浠ヤ笅鏄竴浜涘熀鏈楠わ細
-
鍒涘缓涓€涓寘鍚玏indows API鍑芥暟澹版槑鐨勫姩鎬侀摼鎺ュ簱锛圖LL锛夈€備綘鍙互浣跨敤C/C++缂栧啓杩欎釜DLL锛屽苟鍦ㄥ叾涓0鏄庡拰瀹炵幇Windows API鍑芥暟銆?/p>
-
浣跨敤Java鐨凧NI鏉ュ姞杞借繖涓狣LL锛屽彲浠ヤ娇鐢?code>System.loadLibrary()鏂规硶鍔犺浇DLL鏂囦欢銆?/p>
-
鍦↗ava浠g爜涓0鏄庡拰浣跨敤Windows API鍑芥暟銆備綘闇€瑕佸湪Java涓0鏄庝笌DLL涓浉搴斿嚱鏁扮殑瀵瑰簲鏈湴鏂规硶銆?/p>
涓嬮潰鏄竴涓畝鍗曠殑绀轰緥锛?/p>
棣栧厛锛屽垱寤轰竴涓狢/C++ DLL鏂囦欢锛屼緥濡?code>windowsapi.dll锛屽叾涓寘鍚涓嬩竴涓嚱鏁扮殑瀹炵幇锛?/p>
#include <windows.h>
JNIEXPORT void JNICALL Java_com_example_WindowsAPI_printHello(JNIEnv *env, jobject obj) {
MessageBox(NULL, "Hello from Windows API!", "Message", MB_OK);
}
鐒跺悗锛屽垱寤轰竴涓狫ava绫?code>WindowsAPI.java锛屽叾涓0鏄庡拰浣跨敤Windows API鍑芥暟锛?/p>
public class WindowsAPI {
// 鍦↗ava涓0鏄庝竴涓湰鍦版柟娉?/span>
private native void printHello();
// 鍔犺浇DLL
static {
System.loadLibrary("windowsapi");
}
public static void main(String[] args) {
// 鍒涘缓涓€涓猈indowsAPI瀹炰緥
WindowsAPI api = new WindowsAPI();
// 璋冪敤鏈湴鏂规硶
api.printHello();
}
}
鏈€鍚庯紝浣跨敤Java鐨凧NI宸ュ叿鐢熸垚澶存枃浠躲€傚湪鍛戒护琛屼腑瀵艰埅鍒板寘鍚?code>WindowsAPI.java鐨勭洰褰曪紝骞舵墽琛屼互涓嬪懡浠わ細
javac WindowsAPI.java
javah -jni com.example.WindowsAPI
杩欏皢鐢熸垚涓€涓悕涓?code>com_example_WindowsAPI.h鐨勫ご鏂囦欢銆?/p>
鐒跺悗锛屼娇鐢–/C++缂栬瘧鍣紙濡俫cc锛夊皢璇ュご鏂囦欢涓嶥LL鍜孞ava鐨凧NI搴撻摼鎺ワ紝骞剁敓鎴愪竴涓彲鎵ц鏂囦欢銆傚湪鍛戒护琛屼腑鎵ц浠ヤ笅鍛戒护锛?/p>
gcc -c com_example_WindowsAPI.c -o com_example_WindowsAPI.o
gcc -shared -Wl,--kill-at -o windowsapi.dll com_example_WindowsAPI.o -Wl,--add-stdcall-alias -I"<Java鐨凧NI搴撶洰褰?gt;"
鍏朵腑锛?code><Java鐨凧NI搴撶洰褰?gt;鏄疛ava鐨凧NI搴撶殑璺緞銆?/p>
鏈€鍚庯紝杩愯Java绋嬪簭锛?/p>
java WindowsAPI
杩欏皢寮瑰嚭涓€涓猈indows娑堟伅妗嗭紝鏄剧ず"Hello from Windows API!"銆?/p>
璇锋敞鎰忥紝姝ょず渚嬪彧鏄竴涓畝鍗曠ず渚嬶紝瀹為檯涓婅皟鐢╓indows API鍙兘闇€瑕佹洿澶嶆潅鐨勬搷浣滃拰鍙傛暟浼犻€掋€傛湁鍏虫洿璇︾粏鐨勪俊鎭紝璇峰弬闃匤ava鐨凧NI鏂囨。鍜學indows API鏂囨。銆?/p>