17

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

我挖了一圈,找不到任何东西。有任何想法吗?

编辑

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

4

1 回答 1

15

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

我将此作为我的 .mc 文件之一的命令行:

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

这会在包含目录中创建 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
.

定义了很多错误号。

于 2009-10-05T23:16:48.517 回答