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++頭文件

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)轉(zhuǎn)自:http://www.fomagic.com/index.php/232.html
新聞熱點(diǎn)
疑難解答
圖片精選