|
질문내용이 이게시판에 적절한지 잘 몰것군엽..아니라면 죄송합니다....
먼저 질문부터 드리면...
[질문.1] 자바애플릿에서 윈도우 메시지를
win32애플케이션으로 전송하는 것이 가능한가여?
예를 들어서 특정 브라우져에 WM_CLOSE 메시지를 전송하는 것처럼...
( awt,Event 등은 제가 무지하니 이해해 주세요..ㅎㅎ)
[질문.2]브라우져에서 로딩한 jvm의 핸들을
win32애플케이션에서 가져오는 방법이 있나요?
[질문.3]win32 DLL 에서 applet의 메소드를
호출하는 것이 가능한지 궁금합니다.
(물론 JNI callback 함수는 제외하고 말이죱...)
(참고로 현재는 소켓을 이용해서 통신을 하고 있습니다만..
쪼까 불편한 점들이 있어서 아래 방법들을 고민하고 있습니다.)
아래는 지금까지 삽질한 내용입니다.
---------------------------------------------------------------------
환경은 WinXP+IE6.0+SP1+JRE1.4.2_03+인증(서명된)애플릿 입니다.
(적어놓고 보니 아주 평범한 환경이군여...ㅎㅎ)
먼저,성공한 단위테스트는
1.인증애플릿 서명 및 다운로드 --> OK
2.서명된 애플릿에서 DLL 로딩 --> OK
( 물론 이 부분에서 loadLibrary 보안설정했슴다...)
3.서명된 애플릿에서 DLL 호출 및 콜백호출 --> OK
(1~3 번까지는 sun 홈페이지서 제공하는 샘플로 테스트 했습니다...)
4.win32 애플케이션에서 동일한 DLL 을 로딩 --> OK
( 동일 DLL인 것은 공유된 전역변수를 사용하여 확인했슴다..)
5.win32 애플리케이션에서 DLL에 익스포트된 함수를 사용하여
3번에서 사용한 콜백함수 호출.... --> FAIL
( 3번에서 미리 JNIEnv *env , jobject obj 객체를
DLL 의 공유전역변수에 할당했슴다..
그리고 NewGlobalRef 를 사용하여 글로벌 레퍼런스로 만들었구요...
이부분이 무지가 더러나는 부분이네요..ㅋㅋ
이방법으로 테스트 하면 access violation이 발생하는 것 같습니다.
결국 적절한 방법이 아닌것 같다는 생각입니다..)
*4-5번이 잘못된 접근이라는 판단하에 3번후에 6번을 실행했습니다.
6.win32 애플케이션에서 JNI_GetCreatedJVM(?) 함수를 이용하여
1번서 생성한 jvm.dll 로딩 --> FAIL
( 4~5 번의 접근이 잘못되었다는 판단하에..
1~3번이후 바로 6번으로 선회했슴다.
1번에서 생성한 jvm.dll을 로딩한 후
win32 애플케이션의 메인쓰레드를 attach하여서
JNIEnv *env 객체를 가져오기 위함입니다만
JVM_GetCreatedJVM 함수에서 리턴된 jvm 의 개수가 0 이더군요..
즉 생성된 jvm이 없다는 뜻이겠죠...쩝..)
요기까지가 제가 접근한 방법입니다.
인터넷 문서를 뒤지다 보니
해당 프로레스가 생성한 jvm의 핸들만 가져올수 있다는 내용들이 있더군여..
그렇다면 6번 또한 잘못된 방법이라는 생각이 듭니다.
이리저리 다 포기하고..
아래처럼 다른 방법으로
win32 애플케이션과 자바애플릿의 통신 방법를 고민하고 있습니다.
(단,RMI,RMI-iiop 같이 TCP를 이용한 방법은 일단 배제했슴니다.)
1. 윈도우 메시지 사용한다.
2. win32애플케이션에서 jvm의 핸들을 가져오는 다른 방법을 찾기위해
또 삽질한다...쩝..
조금의 힌트나 조언 ,참고할만한 사이트도 큰 도움이 될것 같습니다..
|