国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JNI筆記1

2019-11-15 00:58:00
字體:
供稿:網(wǎng)友
JNI筆記1一、什么是JNI

java Native Interface(JNI)是Java語言的本地編程接口

是Java 與操作系統(tǒng)本地代碼互相調(diào)用的功能的接口

二、Java 調(diào)用C/C++步驟:

1、在Java類中聲明native方法

新建一個 Java 工程 TestNativeCode 包 com.fomagic 類 Testnative

1 package com.fomagic;2  3 public class TestNative {4     public native void sayHello(); //C++本地代碼實(shí)現(xiàn)    5     public static void main(String[] args) {6         7     }8 }
2、使用javah命令生成包含native方法定義的C/C++頭文件

3、按照生成的C/C++頭文件來寫C/C++ 源文件

1) 在VS中新建 Win32控制臺應(yīng)用程序 –> 確定 –> 下一步(即選擇應(yīng)用程序設(shè)置)

2) 拷貝三個文件到 項(xiàng)目目錄下

com_fomagic_TestNative.h 第2步生成的頭文件

jni.h 位于 JDK 下的include文件目錄中

jni_md.h include—>win32目錄

3) 添加現(xiàn)有項(xiàng)com_fomagic_TestNative.h 引入頭文件(如圖)

4) 新建 源文件 source.cpp 添加如下內(nèi)容

5) 注意 引用的頭文件“<>”代表從系統(tǒng)查找 、 “” “” 優(yōu)先從本地查找

 

1 #include "com_fomagic_TestNative.h"2 #include <iostream>;3 using namespace std;4  5 //對 com_fomagic_TestNative.h 中聲明的方法定義6 JNIEXPORT void JNICALL Java_com_fomagic_TestNative_sayHello (JNIEnv *evn, jobject obj)7 {8     cout<<"Hello World !"<<endl;9 }
4、將C/C++源文件編譯成動態(tài)鏈接庫(DLL)可執(zhí)行二進(jìn)制代碼

執(zhí)行生成解決方案,在項(xiàng)目目錄下的Debug 生成DLL 文件

5、把DLL文件所在路徑添加到PATH環(huán)境變量下

這個配置過Java環(huán)境變量的都應(yīng)該是清楚的 ,這樣可以方便Java程序直接調(diào)用當(dāng)前的動態(tài)鏈接庫

注意:需要注意的是Eclipse開發(fā)Java程序需要重啟 來重新加載環(huán)境變量

6、java 類中加載DLL,然后調(diào)用聲明的native方法
1 package com.fomagic;2 public class TestNative {3     public native void sayHello(); //C++本地代碼實(shí)現(xiàn)    4     public static void main(String[] args) {5         System.loadLibrary("NativeCode"); //加載動態(tài)鏈接庫,不能加 .dll     6         TestNative test=new TestNative();    7         test.sayHello();        8     }9 }
7、運(yùn)行Java 項(xiàng)目

1) 執(zhí)行結(jié)果 :Hello World !

2) 異常信息 : Can’t load IA 32-bit .dll on a AMD 64-bit platform

解決辦法:

前文中提到的的Java引用DLL動態(tài)鏈接庫時,執(zhí)行結(jié)果的 異常信息為:Can’t load IA 32-bit .dll on a AMD 64-bit platform

原因:由于你的windows操作系統(tǒng)是64位,win32控制臺程序默認(rèn)生成 32位的 DLL 動態(tài)鏈接庫

解決辦法: 可想而知我們需要一個64位的DLL動態(tài)鏈接庫,那就來生成一個

1、通過原來的VS項(xiàng)目 配置 (如圖)

2、這時候生成則在 項(xiàng)目目錄—-> x64 —->Debug 目錄 生成 NativeCode.dll

3、同理,把DLL文件所在路徑添加到PATH環(huán)境變量下 ,方便Java程序加載, Eclipse則需要重啟重新加載環(huán)境變量

三、弊端及注意點(diǎn)
  1. 使用JNI,這個java application 將不能跨平臺,如果要移植到別的平臺上,則native代碼需要重新進(jìn)行編寫
  2. java是強(qiáng)類型語言,而C/C++則不是,因此,必須在寫JNI時更加小心
  3. 在構(gòu)建java程序的時候,盡量少用本地代碼

轉(zhuǎn)自:http://www.fomagic.com/index.php/232.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巢湖市| 奎屯市| 乐昌市| 台山市| 屯门区| 大名县| 若尔盖县| 鄂尔多斯市| 镇赉县| 启东市| 乌拉特前旗| 报价| 青河县| 奉贤区| 东辽县| 无棣县| 南江县| 镇坪县| 阳江市| 辰溪县| 永和县| 静宁县| 无为县| 民乐县| 安乡县| 江城| 南澳县| 炎陵县| 博乐市| 吉木萨尔县| 九江县| 蒲城县| 东光县| 连江县| 舞阳县| 龙州县| 芒康县| 霍山县| 保康县| 措美县| 巴林右旗|