Compartilhar via


Códigos no FACILITY_ITF

HRESULTcom instalações como FACILITY_NULL e FACILITY_RPC têm significado universal porque são definidos em uma única fonte: a Microsoft. No entanto, HRESULT em FACILITY_ITF são determinados pelo método de função ou interface 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.

O motivo HRESULTem FACILITY_ITF pode ter significados diferentes em interfaces diferentes é que HRESULTs são mantidos em um tamanho de tipo de dados eficiente de 32 bits. Infelizmente, 32 bits não são grandes o suficiente para o desenvolvimento de um sistema de alocação de código de erro que evita códigos conflitantes alocados por programadores diferentes em diferentes momentos em locais diferentes (ao contrário do tratamento de identificadores de interface e CLSIDs). Como resultado, a HRESULT de 32 bits é estruturada de modo que a Microsoft possa definir vários códigos de erro universais, permitindo que outros programadores definam novos códigos de erro sem medo de conflitos. A convenção de código de status é a seguinte:

  • Códigos de status em instalações diferentes de FACILITY_ITF só podem ser definidos pela Microsoft.
  • Os códigos de status na instalação FACILITY_ITF 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 definir a interface é responsável por coordenar e publicar os códigos de status FACILITY_ITF associados a essa interface.

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

Também é recomendável que os desenvolvedores definam novas funções e interfaces para retornar códigos de erro conforme definido por COM e em instalações diferentes de FACILITY_ITF. Em particular, as interfaces que têm qualquer chance de serem remotas usando o 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 deseja tornar universalmente legal.

tratamento de erros no COM