1

所以这是一个奇怪的错误。在我们的一位客户 (Windows XP SP3) 的一台机器上,我们的程序在尝试通过 ShowDialog() 打开过滤器对话框时崩溃。

会发生什么:用户按预期工作,他/她没有做任何不正常或错误的事情,并且他/她所做的一切都在几台机器上进行了测试(范围从 Win XP 32 位到 Win 7 64 位)。

现在,过了一段时间,他/她想要使用过滤器对话框(他/她当时做了十几次)并且应用程序崩溃了。您会从 Windows XP 中收到精彩的“$applicationname 导致问题并必须终止”消息,在它下方您可以看到过滤器对话框,部分构建(意思是:您可以看到窗口、滚动条和透明的“洞”,其中文本控件/标签应该是。

在 Windows 事件查看器中,您可以看到这样的条目

事件 ID:1000 源:.NET 运行时 4.0 错误重新(也许这背后有什么东西,它说“报告”?!)

错误应用程序 $applicationname.exe,版本 $versionnumber,标记 $someRandomNumbers,错误模块 ntdll.dll,版本 5.1.2600.6055,标记 4d00f27b,调试?0,错误地址 0x00446da

现在,让我感到奇怪的是:通过 ShowDialog 打开对话框的位置嵌入在 2(!) try...catch 块中。应用程序如何崩溃?甚至没有关于这次崩溃的日志文件条目(我们在该程序中的每个 catch 块中都完成了一些事情,并且它始终是我们做的第一件事)。

我已经从那台机器上卸载了应用程序和 .NET 4,再次重新启动安装了所有内容,安装了 Windows 更新并再次重新启动。结果相同。

*edit 刚刚注意到一些事情:当我关闭来自 microsoft 的消息时,会在 eventviewer 中创建一个附加条目:

由于未处理的异常,该过程被终止我猜这就是英语的意思,因为原始消息是我必须翻译的另一种语言

异常代码:c015000f,地址 7c9546DA地址始终相同

4

1 回答 1

0

As @Hans said, it's caused by incorrect use of the De/ActivateActCtx winapi functions.

I met the same problem when I write a VB App. using my ActiveX Contrl(MFC). I place a dialog variant in the control class definition. Like below:

CMyDlg dlg;

So when does the dialog initilized is not in my control. And that made the same issue as you. When the control should be displayed, the error appears.

于 2013-08-13T07:24:02.093 回答