HRESULT:区分自定义代码和系统一

Posted

技术标签:

【中文标题】HRESULT:区分自定义代码和系统一【英文标题】:HRESULT: distinguish custom code from system one 【发布时间】:2018-02-14 12:07:31 【问题描述】:

类似的问题was asked before,但我还没有找到答案。

据我了解,为了制作自定义 HRESULT 代码,我创建了一个 .mc 文件来描述代码,然后编译它并获得一个 .h 文件。但我不知道如何防止可能与系统重叠。

例子:

LanguageNames=(English=0x409:MSG00409)
MessageId = 0x0
Severity = Success
Facility = Application
SymbolicName = CUSTOME_CODE
Language=English
Cusome message
.

产生

#define CUSTOME_CODE                     0x00000000L

其实和S_OK是一样的。

如果我从我的方法中返回 CUSTOME_CODE,调用者无法将其与 S_OK 区分开来;

Wiki 说 HRESULT 包含一些用于区分 Microsoft/用户定义的代码属性,但我不明白如何设置它。 MSDN 还说该位只是“保留”。

如何制作不能与系统代码重叠的代码?

【问题讨论】:

参见HRESULT、mc.exe 的文档和message text files 的规范。要创建 HRESULT 标头,请使用 -o 命令行选项。要设置客户位,请使用-c 命令行选项。您可能希望在顶部定义一些符号名称,例如SeverityNames=(Success=0 Fail=2)FacilityNames=(FACILITY_ITF=4). 没有技术上的区别。您应该像地球上所有非 Microsoft 开发人员一样使用 FACILITY_ITF,他们可以愉快地定义碰撞错误代码,所以这只是一派胡言。请注意,为了增加混淆,有一些 Microsoft 组件使用 FACILITY_ITF ... @SimonMourier,您还可以通过-c 在生成的代码中设置客户位,但实际上这对于HRESULT 代码是非标准的。它是为NTSTATUS 代码保留的。 使用我自己的代码时(比如说,如果它不是在全球范围内分发的东西),我会使用我的自定义设施编号,它不会与 Microsoft 的编号冲突(比如一个高编号),尽管我知道这很糟糕:-) @eryksun 如果约定自定义 HRESULT 必须使用 FACILITY_ITF,那么设置客户位的意义何在? 【参考方案1】:

描述特定接口返回代码的 HRESULT 应包含FACILTY_ITF 设施代码。但请注意,0x0000 和 0x01FF 之间的返回值是为 COM 定义的 FACILITY_ITF 代码保留的。

有关详细信息,请参阅this 链接。

【讨论】:

HRESULT 也有一个内部结构。 (***)en.wikipedia.org/wiki/HRESULT 和(MSDN)msdn.microsoft.com/en-us/library/windows/desktop/…

以上是关于HRESULT:区分自定义代码和系统一的主要内容,如果未能解决你的问题,请参考以下文章

Android自定义View学习一---基础

自定义变量

自定义ToolBar之一

如何区分自定义单元格中的两个文本字段?

全站导航

rest-framework之url控制