C アプリケーションから Java メソッドを呼び出すにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-09 17:35:02
オリジナル
772 人が閲覧しました

How can Java methods be invoked from C   applications?

C アプリケーションからの Java メソッドの呼び出し

クロスプラットフォーム統合の領域では、異なるプログラミング言語間でシームレスに対話できる機能が最も重要になります。 。このようなシナリオの 1 つは、C アプリケーション内から Java 関数を呼び出すことです。

簡単ではありませんが、この偉業は確かにリフレクティブなアプローチを通じて達成可能です。 Java のネイティブ インターフェイス (JNI) を利用することで、C は Java 仮想マシン (JVM) と対話できます。プロセスの詳細な説明は次のとおりです。

  1. Java 仮想マシン (JVM) を作成します。

    • JavaVM オブジェクトと対応する JNIEnv* 環境。
    • JavaVMInitArgs を介して必要な JNI バージョンとオプションを指定します。
  2. Java オブジェクトを取得します。

    • NewStringUTF を使用して、必要な Java オブジェクトを C jstring に変換します。
  3. Java メソッドを見つけます:

    • FindClass を使用して、対象のメソッドを含むクラスを検索します。
    • GetMethodID を使用して、名前と署名でメソッドを識別します。
  4. Java メソッドの呼び出し:

    • CallObjectMethod を使用してオブジェクトの Java メソッドを呼び出します。
    • 結果をジョブジェクトとして取得し、適切なタイプにキャストします。
  5. 結果の抽出:

    • GetStringUTFChars を使用して jstring の結果を C スタイルの文字列に変換します。
  6. クリーンアップ:

    • ReleaseStringUTFChars を使用して JNI リソースを解放します。
    • DestroyJavaVM を使用して JVM を破棄します。

コード例:

#include <jni.h>
#include <stdio.h>

int main() {
    JavaVM *vm;
    JNIEnv *env;
    JavaVMInitArgs vm_args;
    vm_args.version = JNI_VERSION_1_2;
    vm_args.nOptions = 0;
    vm_args.ignoreUnrecognized = 1;

    // Construct a VM
    jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

    // Construct a String
    jstring jstr = env->NewStringUTF("Hello World");

    // Find the class and method
    jclass clazz = env->FindClass("java/lang/String");
    jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;");

    // Call the method
    jobject result = env->CallObjectMethod(jstr, to_lower);

    // Get the C-style string
    const char *str = env->GetStringUTFChars((jstring)result, NULL);

    printf("%s\n", str);

    // Clean up
    env->ReleaseStringUTFChars(jstr, str);
    vm->DestroyJavaVM();
    return 0;
}
ログイン後にコピー

Linux でコードをコンパイルするには、次を実行します:

g++ -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/ -ljvm jnitest.cc
ログイン後にコピー

注: チェックして適切なエラー処理を実装してください。 JNI メソッドの戻りコード。

以上がC アプリケーションから Java メソッドを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート