ホームページ  >  記事  >  バックエンド開発  >  JNI を使用して C アプリケーションから Java メソッドを呼び出すにはどうすればよいですか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-09 14:02:02298ブラウズ

How can I call Java methods from a C   application using JNI?

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

C 開発者として、アプリケーション内から Java コードを操作する必要があるシナリオに遭遇する可能性があります。これは、C/C と Java コード実行環境の間のブリッジを提供する Java Native Interface (JNI) を使用して実現できます。

JNI 内で、C プログラムは Java クラスをロードして実行し、そのメソッドを呼び出すことができます。ただし、このプロセスでは次の点を慎重に考慮する必要があります:

  1. Java 仮想マシン (JVM) の構築: C と Java の間のギャップを埋めるには、インスタンスを作成する必要があります。 C コード内から JVM を編集します。ここで JavaVMInitArgs が活躍します。
  2. Java クラスへのアクセス: JVM インスタンスを取得したら、JNI を使用して Java クラスを検索してインスタンス化できます。 FindClass メソッドは、目的の Java クラスを見つけるのに役立ちます。
  3. Java メソッドの検索: クラス オブジェクトを取得したら、GetMethodID メソッドを使用して、呼び出す Java メソッドを識別できます。
  4. Java メソッドの呼び出し: メソッド ID を入手すると、JNI の CallObjectMethod 関数を使用して Java メソッドを呼び出すことができます。この関数は、Java オブジェクトとそのパラメータを入力として受け取ります。
  5. 結果の取得: Java メソッドを呼び出した後、JNI を使用して戻り値を C スタイルの文字列または文字列として取得できます。 object.
  6. クリーンアップ: リソースを適切に解放することを忘れないでください。 JNI は、この目的のために、ReleaseStringUTFChars や DestroyJavaVM などの関数を提供します。

次に、Java String クラスの toLowerCase メソッドを呼び出す方法を示す C の例を示します。

#include <jni.h>

int main() {
  // Construct a VM
  JavaVM *vm;
  JNIEnv *env;
  JavaVMInitArgs vm_args;
  vm_args.version = JNI_VERSION_1_2;
  int res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

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

  // Find the String class
  jclass clazz = env->FindClass("java/lang/String");

  // Get the toLowerCase method
  jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;");

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

  // Get a 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;
}

覚えておいてくださいJNI メソッドからの戻りコードをチェックして、エラー状態を適切に処理します。これにより、Java メソッドと対話しながら、C アプリケーションの堅牢な動作が保証されます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。