创建自己的 HRESULT?

18

我已经有一个使用了大量COM和HRESULTS的项目。无论如何,我想知道是否可以定义自己的HRESULT,并能够对我们自己的HRESULT使用FormatMessage()函数?

我找了一下,没有找到任何东西。有什么想法吗?

编辑

基本上我想定义一组自己的HRESULT,而不仅仅是返回E_FAIL或其他一些通用的HRESULT。比如说,E_FAIL是可以的。但是假设我想指出例如地理处理子系统崩溃或文件是无效的栅格图像之类的错误。该应用程序已经在整个过程中使用了COM。


这就是在 FormatMessage 调用中 lpSource 参数的作用。您需要传递 FORMAT_MESSAGE_FROM_HMODULE 标志。 - IInspectable
1个回答

15

当然可以。通常你需要创建一个.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
.

有许多错误号码被定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接