创建自己的HRESULT?

时间:2009-10-05 23:04:26

标签: c++ com hresult

我已经有一个使用了大量COM和HRESULTS的项目。我想知道是否有可能定义你自己的HRESULT,并且能够将FormatMessage()用于我们自己的HRESULT?

我在四处乱逛,无法找到任何东西。有什么想法吗?

修改

基本上我想定义一组我自己的HRESULT而不是只返回E_FAIL。或者其他通用的。像E_FAIL一样好。但是,我想说,我想指出,例如地理处理子系统崩溃或文件是无效的光栅图像。该应用程序已经使用了它。

1 个答案:

答案 0 :(得分:14)

当然可以。通常,您创建一个.mc file并将其包含在项目中。指示mc compiler构建它 - 这会创建一个头文件和一个.rc文件。 HRESULTS在头文件中定义。您可以在项目中包含.rc文件,以便编译资源编译器 - 这会将消息定义放入最终模块中。然后,您可以使用普通FormatMessage函数使用HRESULTS格式化消息,并生成错误信息和其他内容。

我将其作为我的.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
.

定义了大量错误编号。