JavaでC++インターフェイスを呼び出す方法

JavaからC++インターフェースを呼び出すには、JNI(Java Native Interface)技術を使用する必要があります。

以下に簡単なサンプルを示します。

最初に、C++でインターフェイスと実装を定義する:

// 接口定义
class MyInterface {
public:
    virtual void myMethod() = 0;
};

// 接口实现
class MyImplementation : public MyInterface {
public:
    void myMethod() {
        // 实现具体的功能
        // ...
    }
};

C++インターフェースの呼び出しには、Java Native Interface (JNI)を使用する。

最初に、Java でネイティブメソッドを宣言する必要があります。

public class MyJavaClass {
    private native void callNativeMethod();
}

次に、javah コマンドを使用して C++ ヘッダーファイル MyJavaClass.h を生成する。

javah -jni MyJavaClass

MyJavaClass.h のファイルの内容は以下のようになります。

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

#ifndef _Included_MyJavaClass
#define _Included_MyJavaClass
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     MyJavaClass
 * Method:    callNativeMethod
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_MyJavaClass_callNativeMethod
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

次に、C++でcallNativeMethodメソッドを実装します

#include "MyJavaClass.h"
#include "MyImplementation.h"

JNIEXPORT void JNICALL Java_MyJavaClass_callNativeMethod(JNIEnv *env, jobject obj) {
    MyImplementation impl;
    impl.myMethod();
}

最後に、javacコマンドでJavaクラスをコンパイルします。

javac MyJavaClass.java

C++コードをg++コマンドでコンパイルする:

g++ -c -fPIC MyJavaClass.cpp -o MyJavaClass.o
g++ -shared -o libmylibrary.so MyJavaClass.o -lc

最後に、Javaプログラムを実行します:

java -Djava.library.path=. MyJavaClass

これでJavaからC++インターフェイスを呼び出すことができるようになりました。

bannerAds