1. 程式人生 > >JNI : Java程式呼叫C方法

JNI : Java程式呼叫C方法

1、新建一個Java類名稱為:TestJavaCallC
2、在類中新增如下程式碼:

 

package Test;
public class TestJavaCallC {

    public native void sayHello();

    public static void main(String[] args){
        System.loadLibrary("NativeCode1");
        TestJavaCallC tNative = new TestJavaCallC();
        tNative.sayHello();
    }
}

 

3、windows環境下:
3.1、執行–>cmd–>進入TestJavaCallC 專案的src目錄下編譯該Java類,命令 javac .(具體路徑)/TestJavaCallC .java。在該TestJavaCallC .java目錄下會生成TestJavaCallC .class檔案
3.2使用javah生成標頭檔案,命令 javah -jni Test.TestJavaCallC 。在src目錄下生成Test_TestJavaCallC.h檔案。檔案內容:

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test_TestJavaCallC */

#ifndef _Included_Test_TestJavaCallC
#define _Included_Test_TestJavaCallC
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Test_TestJavaCallC
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Test_TestJavaCallC_sayHello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

 

4、生成C/C++的DLL檔案。
4.1、開啟VS2013–>新建Visual C++  –>Win32專案–>點選確認
4.2、點選下一步–>選擇DLL(D)–>點選完成
4.3、將上一步生成的Test_TestJavaCallC.h新增到生成的專案標頭檔案中。
4.4、在專案原始檔中新增NativeCode1.cpp檔案。
4.5、在NativeCode1.cpp檔案中新增如下程式碼(如果標頭檔案Test_TestJavaCallC.h無法載入,則需要手動配置:專案右鍵–>屬性–>C/C++ –>常規–>附加包含目錄,將投檔案的路徑新增進去,如果有多個不同路徑,則新增多個):

 

 // NativeCode1.cpp : 定義 DLL 應用程式的匯出函式。
//

#include "stdafx.h"
#include "Test_TestJavaCallC.h"
#include<iostream>

using namespace std;

JNIEXPORT void JNICALL Java_Test_TestJavaCallC_sayHello(JNIEnv *, jobject)
{
    cout << "hello word" << endl;
}

 

4.6、專案右鍵–>生成,在Debug目錄下生成一個NativeCode1.dll檔案。將其拷貝到java環境變數Java_Home的Bin目錄下,如:C:\Program Files\Java\jdk1.7.0_79\bin中。
5、執行Java程式:

 

package Test;

public class TestJavaCallC {

    public native void sayHello();

    public static void main(String[] args){
        System.loadLibrary("NativeCode1");
        TestJavaCallC tNative = new TestJavaCallC();
        tNative.sayHello();
    }