ISAPI扩展中的空_ASSERTE对话框

时间:2009-01-06 14:36:30

标签: c++ c iis

我有一个用C ++编写的ISAPI扩展DLL,使用在XP Pro上的IIS 5.1中运行的Microsoft Visual Studio 2003。每当_ASSERTE触发时,我只会在标题栏中显示一个带有“错误”的空消息框,并且中止/重试/忽略按钮。我看不到的是_ASSERTE宏中的任何表达文本。我已经追溯到运行时库源代码,我最终在crtmbox.c中的一行看起来像是在调用一个动态加载的MessageBoxA()。 lpText(Debug Assertion Failed ...)和lpCaption(Microsoft Visual C ++调试库)有效。

    return (*pfnMessageBoxA)(hWndParent, lpText, lpCaption, uType);

如果我正在调试IIS进程,则“重试”按钮会进入调试器。如果我从同一个源构建的Windows可执行文件中执行相同的代码,那么我会得到我期望的Assert消息框。

我相信我过去看过这个。实际上,移动到Visual Studio 2003最初有助于2003运行时库正确地将MB_SERVICE_NOTIFICATION添加到MessageBox标志,以便在调试服务时至少可以在控制台上看到生成的消息框。

有人有什么想法吗?

JF

1 个答案:

答案 0 :(得分:1)

我没有你的解决方案,只是一个调查的建议。一旦你在调试器中重试了,你是否看过调用堆栈以查看断言发生的上下文?

哦,我仔细查看了_ASSERTE,它依赖于_CRT_WIDE来传递消息字符串。如果编译_ASSERTE的方式(使用宽字符串)和动态加载pfnMessageBoxA(看起来像'窄'字符串类型)之间不匹配,则消息字符串看起来像零长度字符串。 DevStudio 2003将其项目默认为您知道的宽字符串。