標籤:str window 運行 print 32位 http extern gets 步驟
JNI的使用大致有以下4個步驟:
一、在Java中寫native方法
二、用javah命令產生C/C++標頭檔
三、寫對應的C/C++程式實現標頭檔中聲明的方法,並編譯成庫檔案
四、在Java中載入這個庫檔案並使用
工具:
1. Eclipse for Java
2. Visual Studio 2015
依賴:
JDK和JRE:1.8.0_144版本
步驟:
在Eclipse建立一個java項目
添加一個java類,放在com.jni包下
注意:java代碼都不要放到預設包下(就是不寫package語句就會放到預設包),預設包下的方法在其他地方都不能調用!!
寫native方法,native方法就是聲明一個非java實現的方法,比如用C/C++實現
1 package com.jni;2 3 public class JNI {4 public native String getString();5 }
在Eclipse產生,此時在項目目錄會產生對應的.class檔案,Eclipse會將.class檔案放在項目目錄的bin檔案夾下
開啟cmd,進入bin目錄
運行javah命令,產生C/C++標頭檔,注意要帶上java包名
注意:此處是在bin目錄運行javah,不能進入com/jni下來運行javah,否則不能產生標頭檔。
此時在bin目錄下產生了JNI.h標頭檔
標頭檔內容如下:
1 /* DO NOT EDIT THIS FILE - it is machine generated */ 2 #include <jni.h> 3 /* Header for class com_jni_JNI */ 4 5 #ifndef _Included_com_jni_JNI 6 #define _Included_com_jni_JNI 7 #ifdef __cplusplus 8 extern "C" { 9 #endif10 /*11 * Class: com_jni_JNI12 * Method: getString13 * Signature: ()Ljava/lang/String;14 */15 JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString16 (JNIEnv *, jobject);17 18 #ifdef __cplusplus19 }20 #endif21 #endif
接下來開啟Visual studio 2015,建立一個空的win32控制台程式,在程式類型選擇DLL:
配置JNI開發環境:
在【項目設定】 -> 【VC++目錄】 -> 【包含目錄】中,添加JNI標頭檔的路徑
JNI標頭檔一般放在jdk目錄下的include檔案夾,還有include檔案夾下的win32檔案夾
注意release和debug以及32位和64位的選擇
將剛剛產生的標頭檔複製到vs項目目錄下,在項目中添加該標頭檔,同時添加cpp實現標頭檔中的函數
main.cppd代碼如下:
#include "com_jni_JNI.h"JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString(JNIEnv *env, jobject obj) { return env->NewStringUTF("string from C++");}
產生項目,在項目目錄的x64或release檔案夾下產生了JNI.dll動態庫,講dll檔案複製到Eclipse項目目錄下
修改JNI.java代碼,載入JNI庫並添加運行代碼
1 package com.jni; 2 3 public class JNI { 4 static { 5 System.loadLibrary("JNI"); 6 } 7 8 public native String getString(); 9 10 public static void main(String args[]) {11 JNI jni = new JNI();12 System.out.println(jni.getString());13 }14 }
產生並運行,就可以看到從c++中返回的字串了
Windows下JNI的使用教程