1. 程式人生 > >java 基礎篇 Jni c++

java 基礎篇 Jni c++

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)