Share via


Códigos em FACILITY_ITF

HRESULTs com facilidades como FACILITY_NULL e FACILITY_RPC têm significado universal porque são definidos em uma única fonte: Microsoft. No entanto, os resultados de HRESULTem FACILITY_ITF são determinados pela função ou método de interface a partir do qual são retornados. Isso significa que o mesmo valor de 32 bits em FACILITY_ITF retornado de dois métodos de interface diferentes pode ter significados diferentes.

A razão pela qual HRESULTS s em FACILITY_ITF pode ter significados diferentes em interfaces diferentes é que HRESULTSs são mantidos em um tamanho de tipo de dados eficiente de 32 bits. Infelizmente, 32 bits não é grande o suficiente para o desenvolvimento de um sistema de alocação de código de erro que evite códigos conflitantes alocados por programadores diferentes em momentos diferentes em lugares diferentes (ao contrário do tratamento de identificadores de interface e CLSIDs). Como resultado, o HRESULT de 32 bits é estruturado de tal forma que a Microsoft pode definir vários códigos de erro universais, permitindo que outros programadores definam novos códigos de erro sem medo de conflito. A convenção do código de status é a seguinte:

  • Os códigos de status em instalações diferentes FACILITY_ITF podem ser definidos somente pela Microsoft.
  • Os códigos de status no FACILITY_ITF de recursos são definidos exclusivamente pelo desenvolvedor da interface ou função que retorna o código de status. Para evitar códigos de erro conflitantes, quem define a interface é responsável por coordenar e publicar os códigos de status FACILITY_ITF associados a essa interface.

Todos os códigos FACILITY_ITF definidos por COM têm um valor de código no intervalo de 0x0000 a 0x01FF. Embora seja legal usar quaisquer códigos em FACILITY_ITF, recomenda-se que apenas valores de código no intervalo de 0x0200-0xFFFF sejam usados. Esta recomendação é feita como forma de reduzir a confusão com quaisquer erros definidos pela COM.

Também é recomendável que os desenvolvedores definam novas funções e interfaces para retornar códigos de erro conforme definido pelo COM e em instalações diferentes do FACILITY_ITF. Em particular, as interfaces que têm alguma chance de serem remotas usando RPC no futuro devem definir os códigos FACILITY_RPC como legais. E_UNEXPECTED é um código de erro específico que a maioria dos desenvolvedores vai querer tornar universalmente legal.

Tratamento de erro em COM