所以这是一个奇怪的错误。在我们的一个客户(Windows XP SP3)的一台机器上,我们的程序在尝试通过ShowDialog()打开过滤器对话框时崩溃。
会发生什么:用户按预期工作他/她没有做任何异常或错误,他/她所做的一切都是在几台机器上测试的(从Win XP 32位到Win 7 64位)。
现在,经过一段时间后,他/她想要使用过滤器对话框(他/她此时做了十几次)并且应用程序崩溃了。你从Windows XP得到了那个精彩的“$ applicationname导致问题并且必须被终止”的消息,在它下面你可以看到过滤器对话框,部分构建(意思是:你可以看到窗口,滚动条和透明的'洞'在哪里文本控件/标签应该是。
在Windows事件查看器中,您可以看到像这样的条目
事件ID:1000 来源:.NET Runtime 4.0错误重新(也许有些东西支持这个,它说'报告'?!)
错误应用程序$ applicationname.exe,版本$ versionnumber, stamp $ someRandomNumbers,错误模块ntdll.dll,版本 5.1.2600.6055,印章4d00f27b,调试?0,故障地址0x00446da
现在,让我感到奇怪的是:通过ShowDialog打开对话框的位置嵌入在2(!)try ... catch块中。应用程序如何崩溃?对于这次崩溃,甚至没有logfileentries(在我们在该程序中的每个catch块中完成的事情,而且它总是我们做的第一件事)。
我已经从该计算机上卸载了应用程序和.NET 4,重新启动了所有内容,安装了Windows更新并重新启动。结果相同。
*编辑 只是注意到了一些事情:当我从微软关闭消息时,会在eventviewer中创建一个额外的条目:
该过程由于未处理的异常而终止我猜这是英文的意思,因为原始消息是另一种我必须翻译的语言
异常代码:c015000f,地址7c9546DA 地址始终相同
答案 0 :(得分:0)
正如@Hans所说,这是由于错误使用De / ActivateActCtx winapi函数引起的。
我在编写VB应用程序时遇到了同样的问题。使用我的ActiveX控件(MFC)。我在控件类定义中放置了一个对话框变体。 如下所示:
CMyDlg dlg;
所以什么时候启动的对话框不在我的掌控之中。这和你有同样的问题。应显示控件时,将显示错误。