java 基礎篇 Jni c++
阿新 • • 發佈:2018-12-02
java 可以反調c++ ldll庫進行java語言無法實現的功能
1 準備intellij IDEA(elcipse), JDK, VS2008
2 編寫java
package Jni; public class Jni_Demo { static{ //呼叫動態連結庫 System.loadLibrary("JniDemo"); } //定義一個本地方法 public native String sayHello(String name); public static void main(String[] args) { Jni_Demo jniDemo = new Jni_Demo(); String message = jniDemo.sayHello("zhangsan"); System.out.println(message); } }
2 生成c++標頭檔案
進入out 目錄:
打包名+ 類名
目錄結構
Jni/Jni/Jni_Demo.java
E:\java\Jni\out\production\Jni>javah -jni Jni.Jni_Demo
3 拷貝標頭檔案到vs工程
C:\Program Files\Java\jdk1.8.0_171\include\jni.h
C:\Program Files\Java\jdk1.8.0_171\include\win32\jni_md.h
注意:將生成的標頭檔案#include 《jni.h》 改成 "jni.h"
#include "jni.h" #include "Jni_Jni_Demo.h" #include <string> JNIEXPORT jstring JNICALL Java_Jni_Jni_1Demo_sayHello (JNIEnv * env, jobject, jstring name) { printf("Hi,World!"); const char* pname = env->GetStringUTFChars(name,false); std::string dname = pname; std::string Welcome="Welcome" + dname ; return env->NewStringUTF(Welcome.c_str()); }
生成dll動態庫,拷貝到指定目錄,將該目錄加入到環境變數 path中,java IDE啟動就會載入該目錄(也可以Load方法載入絕對路徑)
5 效果;
注意事項: jdk(elcipse/IntelliJ idea) 和 visual 編譯的的版本必須一直(都是x86 或者都是x64)