Создание собственного HRESULT?

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

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

EDIT

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

Ответы

Ответ 1

Да, конечно. Обычно вы создаете файл .mc и включаете это в свой проект. Поручите mc compiler, чтобы создать его - это создает файл заголовка и файл .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
.

с большим количеством определенных ошибок.