FACILITY_ITF 中的代码

具有 FACILITY_NULL 和 FACILITY_RPC 等工具的 HRESULTs 具有通用意义,因为它们是在单个源中定义的:Microsoft。 但是,FACILITY_ITF 中的 HRESULTs 由返回它们的函数或接口方法确定。 这意味着,从两个不同的接口方法返回的 FACILITY_ITF 中的同一 32 位值可能具有不同的含义。

FACILITY_ITF 中的 HRESULTs 在不同的接口中可能具有不同含义的原因是将 HRESULTs 保留为 32 位的有效数据类型大小。 遗憾的是,32 位不足以开发错误代码分配系统,因此无法避免不同的程序员在不同位置和不同时间分配的代码冲突(与处理接口标识符和 CLSID 不同)。 因此,32 位 HRESULT 的结构使 Microsoft 可以定义多个通用错误代码,同时允许其他程序员定义新的错误代码,而不必担心冲突。 状态代码约定如下:

  • 除 FACILITY_ITF 以外的工具中的状态代码只能由 Microsoft 定义。
  • 工具 FACILITY_ITF 中的状态代码仅由返回状态代码的接口或函数的开发人员定义。 为了避免出现冲突的错误代码,定义接口的任何人员都有责任协调和发布与该接口关联的 FACILITY_ITF 状态代码。

所有 COM 定义的 FACILITY_ITF 代码都具有 0x0000 0x01FF 范围内的代码值。 虽然在 FACILITY_ITF 中使用任何代码都是合法的,但建议仅使用 0x0200 0xFFFF 范围内的代码值。 此建议旨在减少与任何 COM 定义的错误的混淆。

此外,还建议开发人员定义新的函数和接口,以返回 COM 定义的错误代码,以及在除 FACILITY_ITF 以外的工具中返回错误代码。 具体而言,将来有机会使用 RPC 进行远程处理的接口应将 FACILITY_RPC 代码定义为合法代码。 E_UNEXPECTED 是大多数开发人员希望实现普遍合法的特定错误代码。

COM 中的错误处理