我有一个ISAPI扩展DLL,它使用在XP Pro上运行的IIS 5.1中的Microsoft Visual Studio 2003以C++编写。每当_ASSERTE触发时,我只会在标题栏和中止/重试/忽略按钮中得到一个空的消息框,并显示'错误'。我没有看到的是_ASSERTE宏中的任何表达式文本。我已经追踪到运行时库源代码,并最终在crtmbox.c中看起来像是在调用一个动态加载的MessageBoxA()。 lpText(调试断言失败...)和lpCaption(Microsoft Visual C++调试库)是有效的。ISAPI扩展中的空_ASSERTE对话框
return (*pfnMessageBoxA)(hWndParent, lpText, lpCaption, uType);
如果我在调试IIS进程,那么重试按钮就会进入调试器。如果我从一个由相同源构建的Windows可执行文件执行相同的代码,那么我会得到我期望的Assert消息框。
我确信我已经看到过这个工作。事实上,移动到Visual Studio 2003最初是因为2003运行时库正确地将MB_SERVICE_NOTIFICATION添加到MessageBox标志,以便在调试服务时至少在控制台上显示结果消息框。
任何人有任何想法?
JF