我有一個Eclipse RCP產品,可以很好地處理鍵盤和鼠標。我想在我的產品中支持自定義硬件。 要在Eclipse RCP產品中啓用設備,我已經編寫了JNI代碼。此JNI代碼初始化設備&驅動程序(正在正常工作)。調用此JNI方法後,RCP應用程序代碼開始在Display.readAndDispatch()方法中接收事件。我不明白的是,如何將這個事件傳遞給我的widget類。所有SWT小部件都有處理事件的windowProc方法。這些方法只處理預定義的事件,它們是私有的(包私有)方法,所以我不能事件覆蓋它們。在Eclipse RCP中處理自定義設備事件
在http://www.eclipse.org/articles/Article-Writing%20Your%20Own%20Widget/Writing%20Your%20Own%20Widget.htm頁面的本機窗口小部件中,他們解釋瞭如何在C++代碼中爲windowProc方法添加鉤子。我試圖以下列方式執行此操作:
JNIEXPORT jint JNICALL Java_com_aiit_iadss_framework_event_SpaceMouseEventManager_initInternal
(JNIEnv *env, jobject obj, jlong hwnd)
{
fprintf(stderr, "Initializing the space mouse module!");
//code to init the device & driver
if(res > 0)
{
//the initialization was successful. Setup the 3D mouse event listener
WM_3DMOUSE = RegisterWindowMessage (_T("SpaceWareMessage00"));
//adding hook on RCP application window for WindowProc
oldProc = (WNDPROC) SetWindowLongPtr((HWND) hwnd, GWLP_WNDPROC, (long) WindowProc);
}
return res;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
int num; /* number of button returned */
//SiSpwEvent Event; /* 3DxWare Event */
//SiGetEventData EData; /* 3DxWare Event Data */
if(msg == WM_3DMOUSE)
{
fprintf(stderr, "Space mouse event caught!");
return (TRUE);
}
//call windowproc to handle other events
return CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
}
當我運行上面的代碼時,JVM與訪問衝突代碼崩潰。 你能幫我解決這個問題嗎?