2013-12-12 91 views
0

在Windows XP上的Java應用程序(JRE 1.7.0_21),我調用本地方法:應用程序崩潰的調用JNI模式對話框

public native String getImage(...); 

...這是一個Visual C++ 10.0 DLL 。這將顯示一個模式對話框。在顯示對話框之前,我正確地將對話框的父句柄設置爲java應用程序窗口,在此窗口的頂部將彈出此對話框。

問題是我的應用程序崩潰,只要在此函數中調用DoModal()。如果我把父窗口的句柄留爲空,那麼對話框就會正常工作而不會崩潰。只有當設置句柄到父窗口Java應用程序崩潰。

如果我在dll part/jni中缺少某些東西,請告訴我。

+0

發佈更多代碼,特別是:如何設置對話框對象並指定父對象。你如何管理你的DLL的AFX_MODULE_STATE。此外,更準確地說「崩潰」。如果在崩潰之前將調試器附加到Java進程並讓它發生,你會發現什麼? – manuell

+0

該DLL是MFC擴展DLL。當我在導出的函數中添加AFX_MANAGE_STATE(AfxGetStaticModuleState())時,出現'mfcs100ud.lib(dllmodul.obj):錯誤LNK2005:_DllMain @ 12已在myproj.obj中定義錯誤。在以下文章[鏈接] http://translate.googleusercontent.com/translate_c?depth=1&hl=hi&rurl=translate.google.co.in&sl=zh-CN&tl=zh-CN&u=http://blog.csdn .net/eulb/article/details/2580958&usg = ALkJrhiwFcu6z-sA8Ng0QNvvqHys1_tkOQ [/ link]但無效。 –

+0

使用dll的調試版本,調試進入DoModal()調用時,調用失敗了AfxGetResourceHandle()在afxwin1.inl文件中的斷言。 –

回答

0

您通常不能在非MFC可執行文件中使用「MFC擴展DLL」。

Extension DLLs,尤其是:

客戶端可執行文件必須與_AFXDLL 定義編譯MFC應用程序。

是 使用MFC的共享版本可以使用擴展DLL只建了MFC可執行文件(無論是應用程序或常規的DLL)。

設置一個新項目,爲MFC DLL類型選擇「Regular DLL」。

+0

我創建了常規DLL,並在導出的函數中包含了AFX_MANAGE_STATE(AfxGetStaticModuleState())。現在沒有構建錯誤,但問題仍然存在。一旦調用DoModal(),應用程序就會崩潰。 –

+0

然後,您必須發佈代碼。你如何創建你的DialogBox對象? ,你如何設置育兒?,你怎麼稱呼DoModal? – manuell

+0

這次在DoModal()內部調試時,它在:: EnableWindow(hWndParent,FALSE)中崩潰;當Windows試圖禁用java應用程序窗口的父窗口時。 –