C アプリケーションからの Java メソッドの呼び出し
クロスプラットフォーム統合の領域では、異なるプログラミング言語間でシームレスに対話できる機能が最も重要になります。 。このようなシナリオの 1 つは、C アプリケーション内から Java 関数を呼び出すことです。
簡単ではありませんが、この偉業は確かにリフレクティブなアプローチを通じて達成可能です。 Java のネイティブ インターフェイス (JNI) を利用することで、C は Java 仮想マシン (JVM) と対話できます。プロセスの詳細な説明は次のとおりです。
Java 仮想マシン (JVM) を作成します。
Java オブジェクトを取得します。
Java メソッドを見つけます:
Java メソッドの呼び出し:
結果の抽出:
クリーンアップ:
コード例:
#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 サイトの他の関連記事を参照してください。