我已经有一个使用大量 COM 和 HRESULTS 的项目。无论如何,我想知道是否可以定义自己的 HRESULT,并且能够将 FormatMessage() 用于我们自己的 HRESULT?
我挖了一圈,找不到任何东西。有任何想法吗?
编辑
基本上我想定义一组我自己的 HRESULT,而不是仅仅返回 E_FAIL。或其他通用的之一。像 E_FAIL 就可以了。但假设我想指出,例如地理处理子系统崩溃或文件是无效的光栅图像。该应用程序已经在整个过程中使用了 COM。
是的当然。通常,您创建一个.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
.
定义了很多错误号。