Создаете свой HRESULT? - PullRequest
       32

Создаете свой HRESULT?

16 голосов
/ 06 октября 2009

У меня уже есть проект, который использует много COM и HRESULTS. В любом случае мне было интересно, возможно ли определить ваш собственный HRESULT, и иметь возможность использовать FormatMessage () для нашего собственного HRESULT?

Я покопался и не могу ничего найти. Есть идеи?

EDIT

По сути, я хочу определить набор моих собственных HRESULT вместо того, чтобы просто возвращать E_FAIL. Или один из других общих. Вроде E_FAIL в порядке. Но допустим, я хочу указать, что, например, произошла ошибка подсистемы геообработки или файл является недопустимым растровым изображением. Приложение уже использует com через него.

1 Ответ

14 голосов
/ 06 октября 2009

Да, конечно. Обычно вы создаете файл .mc и включаете его в свой проект. Дайте команду компилятору mc создать его - это создаст файл заголовка и файл .rc. HRESULTS определены в заголовочном файле. Вы включаете файл .rc в свой проект как обычно для компиляции ресурсов - это помещает определения сообщений в ваш последний модуль. Затем вы можете использовать обычные функции FormatMessage для форматирования сообщений с использованием HRESULTS и генерирования информации об ошибках и прочего.

Это командная строка для одного из моих файлов .mc:

mc   -h "../include" -r "../include" "..\include\errors.mc"

Это создает ошибки .rc и errors.h в каталоге include. Тогда я сделал:

#include "errors.rc"

в моем основном файле .rc для проекта.

Файл .mc выглядит примерно так:

LanguageNames=(English=0x409:MSG00409)

MessageId=0x1
SymbolicName=SOME_CATEGORY
Language=English
Some Category
.

MessageID=
Severity=Error
SymbolicName=ERROR_INVALID_PROP_INDEX

Language=English
Invalid property index %1
.

с указанием множества номеров ошибок.

...