Пустое диалоговое окно _ASSERTE из расширения ISAPI - PullRequest
2 голосов
/ 06 января 2009

У меня есть библиотека расширения ISAPI, написанная на C ++ с использованием Microsoft Visual Studio 2003, работающая в IIS 5.1 на XP Pro. Всякий раз, когда запускается _ASSERTE, я просто получаю пустое окно сообщения с ошибкой в ​​строке заголовка и кнопками Abort / Retry / Ignore. Чего я не вижу, так это какого-либо текста выражения из макроса _ASSERTE. Я проследил в исходный код библиотеки времени выполнения, и я оказался в crtmbox.c в строке, которая выглядит так, как будто она вызывает динамически загруженную MessageBoxA (). Допустимы lpText (Ошибка отладки ...) и lpCaption (Библиотека отладки Microsoft Visual C ++).

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

Если я отлаживаю процесс IIS, кнопка «Повторить» ломается в отладчике. Если я выполню тот же код из исполняемого файла Windows, созданного из того же источника, я получу окно сообщения Assert, которое я ожидаю.

Я уверен, что видел, как это работало в прошлом. Фактически, переход к Visual Studio 2003 изначально помог, поскольку библиотека времени выполнения 2003 правильно добавляет MB_SERVICE_NOTIFICATION к флагам MessageBox, так что по крайней мере получающееся окно сообщения отображается на консоли при отладке службы.

У кого-нибудь есть идеи?

JF

1 Ответ

1 голос
/ 22 января 2009

У меня нет решения для вас, только предложение для расследования. После того, как вы сделали Retry для отладки, вы посмотрели на стек вызовов, чтобы увидеть контекст, в котором происходит утверждение?

О, я внимательно посмотрел на _ASSERTE, и он полагается на _CRT_WIDE для передачи строки сообщения. Если было несоответствие между способом компиляции _ASSERTE (с широкими строками) и динамической загрузкой pfnMessageBoxA (похоже, что это «узкий» тип строки), когда строка сообщения будет выглядеть как строка нулевой длины. DevStudio 2003 по умолчанию использует свои широкие строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...