У меня есть приложение Windows на основе MFC с графическим интерфейсом, оно написано на C ++ и содержит много COM-объектов; давайте назовем это «HelloWorld».
Пользователь отправил мне сообщение об ошибке: иногда, в ответ на конкретный
пользовательское действие, появляется MessageBox (на следующем рисунке я удалил заголовок строки заголовка).
1) заголовок строки заголовка MessageBox HelloWorld
и, глядя на эту строку в коде, мне кажется, что это строка ресурса
идентифицировано AFX_IDS_APP_TITLE
(в .rc
исходный файл
приложение);
Ниже приведен соответствующий раздел .rc
исходный файл:
STRINGTABLE
BEGIN
AFX_IDS_APP_TITLE "HelloWorld"AFX_IDS_IDLEMESSAGE "..."AFX_IDS_HELPMODEMESSAGE "..."END
2) На Windows 7 с английским языком сообщение MessageBox
является «Член не найден.»
3) В Windows 7 с разными языками сообщение переводится на
правильный язык.
Я думаю, что проблема описана здесь
HOWTO: Устранение неполадок «Член не найден» 0x80020003 Ошибка и связано с
DISP_E_MEMBERNOTFOUND
ошибка; Я на самом деле решил проблему на
Пользовательский сайт.
Но есть другая проблема, которая до сих пор не решена, и это
проблема пользовательского опыта: пользователь, отправивший мне отчет об ошибке, не
программист и не знает, что означает «член» в выражении
такие как «функция-член», и поэтому пользователь был слегка обижен сообщением из-за
много значений слова «член» (по крайней мере, на английском языке и в
Итальянский).
Я проверил исходный код приложения, и мне кажется, что
MessageBox не генерируется приложением; теперь я хотел бы
знать, как генерируется этот MessageBox для его перехвата и
отобразить другой MessageBox: это можно сделать?
Я не знаю о конкретной ошибке, но для подавления сообщения, это вызов Windows.
BOOL SetThreadErrorMode(
_In_ DWORD dwNewMode,
_Out_ LPDWORD lpOldMode
);
До Windows 7 используйте SetErrorMode.
Других решений пока нет …