我已经有一个使用了大量COM和HRESULTS的项目。无论如何,我想知道是否可以定义自己的HRESULT,并能够对我们自己的HRESULT使用FormatMessage()函数?
我找了一下,没有找到任何东西。有什么想法吗?
编辑
基本上我想定义一组自己的HRESULT,而不仅仅是返回E_FAIL或其他一些通用的HRESULT。比如说,E_FAIL是可以的。但是假设我想指出例如地理处理子系统崩溃或文件是无效的栅格图像之类的错误。该应用程序已经在整个过程中使用了COM。
当然可以。通常你需要创建一个.mc文件,并将其包含在你的项目中。指示mc编译器进行构建 - 这将创建一个头文件和一个.rc文件。 HRESULTS定义在头文件中。像往常一样将.rc文件包含在你的项目中,以供资源编译器编译 - 这将把消息定义放入你的最终模块中。然后你可以使用正常的FormatMessage函数来使用HRESULRS格式化消息,并生成错误信息和其他内容。
我将此作为我的一个.mc文件的命令行:
mc -h "../include" -r "../include" "..\include\errors.mc"
这会在include目录下创建errors.rc和errors.h文件。然后我执行了以下操作:
#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
.
有许多错误号码被定义。
FormatMessage
调用中lpSource
参数的作用。您需要传递FORMAT_MESSAGE_FROM_HMODULE
标志。 - IInspectable