C 애플리케이션에서 Java 메소드를 호출하는 방법
문제:
다음이 가능합니다. C 애플리케이션에서 Java 코드에 정의된 함수를 호출하시겠습니까?
답변:
예, C 코드에서 Java 메소드를 호출하는 것이 가능하지만 프로세스가 다소 복잡합니다. . 이 접근 방식은 리플렉션을 활용하고 유형이 안전하지 않은 방식으로 작동합니다.
구현:
C 코드는 다음에서 JVM(Java Virtual Machine)의 인스턴스를 생성합니다. C 코드 내에서. 네이티브 코드가 Java에서 호출되는 경우 VM 인스턴스를 생성할 필요가 없습니다.
다음은 C에서 Java 메소드에 액세스하는 방법의 예입니다.
#include<jni.h> #include<stdio.h> int main(int argc, char** argv) { JavaVM *vm; JNIEnv *env; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_2; vm_args.nOptions = 0; vm_args.ignoreUnrecognized = 1; // Create a JVM jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args); // Create a Java String object jstring jstr = env->NewStringUTF("Hello World"); // Get the class containing the method to be invoked jclass clazz = env->FindClass("java/lang/String"); // Get the method to be called jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;"); // Invoke the method on the object jobject result = env->CallObjectMethod(jstr, to_lower); // Convert the result to a C-style string const char* str = env->GetStringUTFChars((jstring) result, NULL); printf("%s\n", str); // Clean up env->ReleaseStringUTFChars(jstr, str); // Destroy the JVM vm->DestroyJavaVM(); return 0; }
컴파일:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!