>  기사  >  백엔드 개발  >  C 애플리케이션에서 Java 메소드를 어떻게 호출할 수 있습니까?

C 애플리케이션에서 Java 메소드를 어떻게 호출할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-09 17:35:02800검색

How can Java methods be invoked from C   applications?

C 애플리케이션에서 Java 메소드 호출

교차 플랫폼 통합 영역에서는 서로 다른 프로그래밍 언어 간에 원활하게 상호 작용하는 능력이 무엇보다 중요합니다. . 그러한 시나리오 중 하나는 C 애플리케이션 내에서 Java 함수를 호출하는 것입니다.

간단하지는 않지만 실제로 이 기능은 반성적인 접근 방식을 통해 달성할 수 있습니다. JNI(Java의 기본 인터페이스)를 활용하여 C는 JVM(Java Virtual Machine)과 상호 작용할 수 있습니다. 프로세스에 대한 자세한 설명은 다음과 같습니다.

  1. JVM(Java Virtual Machine) 생성:

    • JNI를 생성하여 초기화합니다. JavaVM 객체 및 해당 JNIEnv* 환경.
    • 원하는 JNI 버전을 지정하고 JavaVMInitArgs를 통해 옵션을 선택할 수 있습니다.
  2. Java 객체 얻기:

    • 다음을 사용하여 필요한 Java 객체를 C jstring으로 변환합니다. NewStringUTF.
  3. Java 메서드를 찾습니다:

    • FindClass를 사용하여 대상 메서드가 포함된 클래스를 찾습니다.
    • 다음을 사용하여 이름과 서명으로 메소드를 식별합니다. GetMethodID.
  4. Java 메소드 호출:

    • CallObjectMethod를 사용하여 객체에 대해 Java 메소드를 호출합니다.
    • 결과를 jobject로 검색하여 적절한 항목에 캐스팅합니다. type.
  5. 결과 추출:

    • 다음을 사용하여 jstring 결과를 C 스타일 문자열로 변환합니다. GetStringUTFChars.
  6. 정리:

    • ReleaseStringUTFChars를 사용하여 JNI 리소스를 해제합니다.
    • 파기합니다. JVM DestroyJavaVM.

예제 코드:

#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.