2013-12-12 52 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应用程序窗口的父窗口时。 –