1. Javaテストクラスを書く

2. Javaテストクラスを利用してCヘッダーファイルを生成する(私はCやC++の基礎がなく、後から出てくる非JAVAのコードが具体的にCなのかC++なのかもよくわからない。そのため、チュートリアルではすべてCと呼んでいる)

3. Cヘッダーファイルを利用してCコードを書く

4. Cライブラリを生成する

5. Javaからの呼び出しテスト

ステップ1:Javaテストクラスを作成する

コードは次のとおりです:

package com.aijiao.test;

public class JNIDemo {
    
    //定义一个方法,该方法在C中实现
    public native void testHello();
    
    public static void main(String[] args){
        //加载C文件
        System.loadLibrary("TestJNI");
        JNIDemo jniDemo = new JNIDemo();
        jniDemo.testHello();
    }

}

ステップ2:Javaクラスを利用してCヘッダーファイルを生成する

生成コマンドは次のとおりです:

javah -classpath . -jni com.aijiao.test.JNIDemo

このコマンドは、Javaテストクラスのプロジェクトのbinディレクトリで実行する必要があります。

下の図は生成されたヘッダーファイルです

ステップ3:Visual StudioでCコードを記述する

1. ファイル→新規作成→プロジェクトを選択します。

2. (Win32)を選択し、プロジェクト名とプロジェクトの場所を入力して、「OK」をクリックします。

3. そのまま「次へ」をクリックします。

4. ここではDLLと空のプロジェクトを選択し、「完了」をクリックします。

5. 次のようなプロジェクト構造が生成されます。

6. ソースファイルのフォルダーを右クリックし、「追加」→「クラス」を選択します。

7. そのまま「追加」をクリックします。

8. クラス名を入力し、「完了」をクリックします。(C++クラス)

JDKディレクトリのincludeディレクトリにはjni.hファイルがあります。includeのwin32ディレクトリにはjni_md.hファイルがあります。さらにJavaプロジェクトのbinディレクトリにあるCヘッダーファイルも含めて、まとめてCプロジェクトのTestJNIディレクトリにコピーします:(現在のプロジェクト名はTestJNIで、プロジェクトディレクトリの下にもう一つTestJNIディレクトリがあります。プロジェクトディレクトリ→TestJNI→jni.h、com_aijiao_test_JNIDemo.h、jni_md.h)下図のとおりです:

現在のディレクトリはプロジェクトディレクトリです。

コピーしたjni.h、com_aijiao_test_JNIDemo.h、jni_md.h

10. Cプロジェクトのヘッダーファイルフォルダーを右クリックし、「追加」→「既存の項目」を選択します。

11. jni.h、com_aijiao_test_JNIDemo.h、jni_md.hを選択します。

12. com_aijiao_test_JNIDemo.hファイルを開きます。

13. `#include <jni.h>` を `#include "jni.h"` に変更すると、エラー表示が消えます。

14. TestJNI.cppファイルに次のコードを記述します:

コード:

#include "com_aijiao_test_JNIDemo.h"
#include <iostream>
#include <stdio.h>

JNIEXPORT void JNICALL Java_com_aijiao_test_JNIDemo_testHello
(JNIEnv *, jobject) {
    printf("this is C++ print");
}

15. Cプロジェクトを構成します。ソリューションを右クリックし、「プロパティ」を選択します。

16. 次のように構成します。

ステップ4:プロジェクトを右クリックしてビルドすると、次の情報が出力されます。

以下は生成されたdllライブラリです。

ステップ5:Javaプロジェクトで次のように設定します。

dllライブラリがあるパスを入力します(ファイル名は不要です)。保存するだけです。

Javaクラスを実行すると、結果は次のようになります。

作者: aijiao

Email: 2585838470@qq.com

アドレス: https://my.oschina.net/aijiaoer0624/blog/1142876