2010-08-06 3 views
0

내 상황이 좀 복잡하지만이 방법이 있어야합니다. JNative를 사용하여 응용 프로그램을 여는 Java 프로그램을 구현 중입니다. 이 응용 프로그램은 C++로 작성되었습니다. 그러나 응용 프로그램이 끝나면 Java에 콜백하여 Java에서 실행이 완료되었음을 알 수 있도록합니다. 나는 그것을 어떻게 할 수 있습니까? JNI를 사용해야한다는 것을 알고 있지만 그에 대한 예제는 없습니다. 감사.C++에서 Java 메소드에 콜백

답변

1

"응용 프로그램 열기"란 외부 프로세스를 시작하거나 라이브러리 호출을하는 것을 의미합니까?

실행 파일을 방금 시작한 경우 Runtime.getRuntime().exec을 사용하여 프로세스를 시작하고 반환 된 프로세스 핸들을 사용하여 프로세스의 반환 코드를 얻을 수 있습니다. 실행 한 프로세스에서 getInputStream으로 프로세스 출력을 캡처 할 수도 있습니다.

그러나 실제로 C 프로세스를 호출하는 경우에는 그렇습니다. JNI가 선호되는 솔루션입니다. 당신이 전에 방법을 얻을 필요가 C에서 짧은에서

JNIEXPORT void JNICALL 
Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth) 
{ 
    jclass cls = (*env)->GetObjectClass(env, obj); 
    jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V"); 
    if (mid == 0) 
    return; 
    printf("In C, depth = %d, about to enter Java\n", depth); 
    (*env)->CallVoidMethod(env, obj, mid, depth); 
    printf("In C, depth = %d, back from Java\n", depth); 
} 

: http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html

튜토리얼에서 그것의 요점은 이것이다 : 당신은 JNI에 좋은 튜토리얼 다시 여기에 자바 객체에 대한 호출을 찾을 수 있습니다 그것을 부를 수 있습니다. 또한 javap 도구를 사용하여 메서드 서명을 생성 할 수 있으므로 호출 할 수 있습니다.

관련 문제