日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java JNI初探

發(fā)布時間:2023/12/10 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java JNI初探 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

---說明,之前直接百度出來的例子,照貓畫虎。沒想到的是這例子居然直接來自百度百科,寫著寫著就囧了。。

---anyway,寫完了就當(dāng)是給自己看吧。

?

同事求助,就看了一下,照貓畫虎一番,略有所得。

?

?

JNI是什么?

NI是 Java Native Interface 的縮寫,它提供了若干的API實現(xiàn)了Java和其他語言的通信(主要是C&C++)。從Java1.1開始,JNI標(biāo)準(zhǔn)成為java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計的,但是它并不妨礙你使用其他編程語言,只要調(diào)用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。

-- 以上來自百度百科

?

JNI步驟

① java類中編寫帶有native 聲明的方法。

② 使用 javac 命令編譯所編寫的java類。

③ 使用 javah 命令生成頭文件。

④ 使用C/C++實現(xiàn)本地方法。

⑤ 生成動態(tài)連接庫。

⑥ 執(zhí)行(java)。

--還是來自百度百科

?

JNI實例

1 public class HelloWorld { 2 public native void displayHelloWorld();//所有native關(guān)鍵詞修飾的都是對本地的聲明 3 static { 4 System.loadLibrary("hello");//載入本地庫 5 } 6 public static void main(String[] args) { 7 new HelloWorld().displayHelloWorld(); 8 } 9 }

javac HelloWorld.java

javah HelloWorld

編寫本地方法實現(xiàn)和由javah命令生成的頭文件里面聲明的方法名相同的方法。

  建議用vs,新建 Win Console - DLL 項目,新建文件:HelloWorldImpl.cpp

1 #include "jni.h" 2 #include "HelloWorld.h" 3 4 //#include other headers 5 6 JNIEXPORT void JNICALL 7 Java_HelloWorld_displayHelloWorld(JNIEnv*env,jobject obj) 8 { 9 printf("Helloworld!\n"); 10 return; 11 }

注意,這里使用的是"jni.h",也可以使用<jni.h>。前者將jni.h文件復(fù)制進來即可,后者需要在項目中引入其所在的文件夾($JAVA_HOME$/include)。

但是,據(jù)我實測,實際上還需要 jni_md.h 文件,要么復(fù)制進來,要么引入其所在的文件夾($JAVA_HOME$/include/win32)。

⑤ 如無問題,就可以進行編譯了。這里要注意一點,如果jdk是64位版本,那么dll也需要64位的。vs可以直接設(shè)置生成的版本。

雖然可以使用單獨的命令來生成dll文件,不過這里只是一個練習(xí),直接build項目即可生成,然后在文件夾中就能找到。

⑥ 由于我們在Java中調(diào)用的hello,所以需要將該dll復(fù)制到j(luò)ava所在的文件夾,并重命名。

static {System.loadLibrary("hello");//載入本地庫}

然后,運行即可。

?

一般來說,如果第三方有提供dll,那可以直接調(diào)用執(zhí)行。

?

ps:如果不用vs,那也可以使用gcc,參考百度百科。

?

轉(zhuǎn)載于:https://www.cnblogs.com/larryzeal/p/5687392.html

總結(jié)

以上是生活随笔為你收集整理的Java JNI初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。