Третий параметр указывает код интересующей нас ошибки, а четвертый —
язык, на котором мы хотим увидеть ее описание. Поскольку мы хотим получить
сообщения, переданные Windows, идентификатор языка создается из пары опре-
деленных констант, в результате получается 0 — значение, соответствующее язы-
ку по умолчанию, заданному в операционной системе. Это пример ситуации, в
которой невозможно «зашить» в код идентификатор языка, поскольку нельзя уз-
нать заранее, какой язык используется в той копии операционной системы, где
будет запущена программа ErrorShow. Если выполнение FormatMessage заканчивается успешно, описание ошиб-
ки помещается в блок памяти, и я копирую его в прокручиваемое окно, рас-
положенное в нижней части окна программы. А если вызов FormatMessage
10 Часть I. Материалы для обязательного чтения
оказывается неудачным, я пытаюсь найти код сообщения в модуле NetMsg. dll,
чтобы выяснить, не связана ли ошибка с сетью (о поиске DLL на диске см. в главе
20).
Используя описатель NetMsg. dll, я вновь вызываю FormatMessage. Дело в
том, что у каждого DLL или ЕХЕ-модуля может быть собственный набор кодов
ошибок, который включается в модуль с помощью Message Compiler (MC. exe). Как раз это и позволяет делать утилита Error Lookup через свое диалоговое окно
Modules.