2012. 6. 21. 14:35ㆍ프로그래밍/Cocos2dX
Cocos2d-x를 이용해서 C++/C에서 Java소스의 함수를 호출할때 자바 클래스내에 있는 함수의 고유식별자를 알아내야 합니다. 그래야 JNI를 통해서 호출이 가능합니다.
우선 간단하게 알아내는 방법은 JDK의 javap.exe를 이용하는 방법입니다.
@echo on
cd C:\Program Files\Java\jdk1.7.0\bin\
javap.exe -s C:\My_Work\Coco2DX\cocos2d-1.0.1-x-0.12.0\SVSZ\android\bin\classes\com\manodio\svsz\SVSZ.class
pause
일단 위와 같이 bat파일을 만들어서 사용해도 좋습니다.
위 명령어를 실행하면 SVSZ.class내의 모든 함수들이 "(ILJAVA/LANG/STRING;[I)J" 등의 값으로 매칭되어 있는 것을 확인할수 있을겁니다. 그럼 그 값을 활용하시면 됩니다.
그리고 다음과 같이 C++소스에서 함수를 만들고 사용하면 됩니다. LOGD와 g_Env 그리고 g_jcls는 위에서 별도로 선언한 변수들입니다.
void doPlayLog(int MODE, int LEVEL, const char * STATE, const char * INFO)
{
//다음과 같이 로그를 남겨서 문제가 발생된 부분은 확인하고 해결해 나갑니다.
LOGD("COCOS2DX : C++ -> doManoServerPlayLog : ");
//다음과 같이 문장을 String형의 UTF로 변경해주셔야 정상적으로 전달이 됩니다.
jstring stringArg_STATE = g_Env->NewStringUTF(STATE);
jstring stringArg_INFO = g_Env->NewStringUTF(INFO);
//다음과 같이 함수를 호출합니다.
g_Env->CallStaticIntMethod(g_jcls, g_Env->GetStaticMethodID(g_jcls, "doPlayLog ", "(IIIILjava/lang/String;Ljava/lang/String;)I"),MODE, LEVEL, stringArg_STATE, stringArg_INFO);
}
위와 같은 방법으로 간단하게 C/C++ ->Java 또는 Java -> C/C++ 의 함수 호출 그리고 결과 값 되돌려주기가 가능합니다.
'프로그래밍 > Cocos2dX' 카테고리의 다른 글
Cocos2d-X에서 보안락 화면에서 게임 프로세스 처리방법. (0) | 2012.07.19 |
---|---|
Cocos2d-X에서 게임 화면 180도로 회전하게 만들기. (0) | 2012.07.18 |
Cocos2d-x활용해서 Java에서 C++ 함수 호출하기 (0) | 2012.06.15 |
Flurry를 이용한 어플 사용자 통계분석하기. (0) | 2012.06.14 |
Cocos2d-X사용 안드로이드에서 assets에 접근 못할때... (0) | 2012.06.11 |