JNI (Java Native Interface) java本地化接口,允許java連接本地機器碼進行操作
也就是java可以與咱們的C/C++ Asm 進行混合編程了!好處就是:實現java的底層相關操作
這是java的語言的特性 迫使它沒辦法和才C/C++一樣和硬件打交道,但是呢!!咱們有了JNI
我們照樣可以通過C/C++已經寫好的本地化 代碼 進行底層的操作 !
這裏我只用java寫 一個與Vc寫的Dll通信的類,來通過C++進行操作!其他諸如更底層的操作你自己玩把!
public class JniNative{
public native int callNative(int x,int y); //主要是用Native修飾的方法,此方法就是調用Win32 Dll導出的方法
static {
System.loadLibrary("VcDll"); //這裏此類動態加載Dll可以隨便寫 "VcDll"代表.Dll的名字
//放在static裏面就是爲了創建類的對象之前就加載動態庫
}
public static void main(String [] args){
JniNative jni=new JniNative();
System.out.println(jni.callNative(5,8));
}
}
因爲Java規定:public 出來的類必須要與文件名 同名,所以我保存爲JniNative.java
先編譯一下:javac JniNative.java 檢查是否有語法錯誤
再做一個C++的頭文件: javah -jni JniNative 此時 只要寫類名就是!
這時會生成一個 JniNative.h 的頭文件,以下此圖是頭文件內容
你只要用VC++6新建一個Win32 Dll空工程把頭添加進去,然後自己寫那函數的實現
把編譯好的Dll防到與JniNative.class文件相同的目錄下,而且保證.Dll的名字爲 VcDll.Dll! 所以再測試一下: