Kody w FACILITY_ITF
HRESULTz obiektami takimi jak FACILITY_NULL i FACILITY_RPC mają uniwersalne znaczenie, ponieważ są zdefiniowane w jednym źródle: Microsoft. Jednak HRESULTw FACILITY_ITF są określane przez funkcję lub metodę interfejsu, z której są zwracane. Oznacza to, że ta sama wartość 32-bitowa w FACILITY_ITF zwrócona z dwóch różnych metod interfejsu może mieć różne znaczenie.
Powodem HRESULTw FACILITY_ITF może mieć różne znaczenie w różnych interfejsach jest to, że HRESULTsą przechowywane do wydajnego rozmiaru typu danych 32 bitów. Niestety, 32 bity nie są wystarczająco duże w przypadku tworzenia systemu alokacji kodu błędu, który pozwala uniknąć konfliktów kodów przydzielonych przez różnych programistów w różnych miejscach (w przeciwieństwie do obsługi identyfikatorów interfejsu i identyfikatorów CLSID). W rezultacie 32-bitowy HRESULT jest ustrukturyzowany tak, aby firma Microsoft mogła zdefiniować kilka uniwersalnych kodów błędów, umożliwiając innym programistom definiowanie nowych kodów błędów bez obawy przed konfliktem. Konwencja kodu stanu jest następująca:
- Kody stanu w obiektach innych niż FACILITY_ITF mogą być zdefiniowane tylko przez firmę Microsoft.
- Kody stanu w obiekcie FACILITY_ITF są definiowane wyłącznie przez dewelopera interfejsu lub funkcji zwracającej kod stanu. Aby uniknąć konfliktowych kodów błędów, każdy, kto definiuje interfejs, jest odpowiedzialny za koordynowanie i publikowanie kodów stanu FACILITY_ITF skojarzonych z tym interfejsem.
Wszystkie kody FACILITY_ITF zdefiniowane przez com mają wartość kodu w zakresie 0x0000-0x01FF. Chociaż jest to legalne używanie dowolnych kodów w FACILITY_ITF, zaleca się używanie tylko wartości kodu w zakresie 0x0200-0xFFFF. To zalecenie jest podejmowane jako środek zmniejszenia nieporozumień z błędami zdefiniowanymi przez com.
Zaleca się również, aby deweloperzy definiowali nowe funkcje i interfejsy, aby zwracać kody błędów zdefiniowane przez model COM i w obiektach innych niż FACILITY_ITF. W szczególności interfejsy, które mają jakiekolwiek szanse na zdalne używanie RPC w przyszłości, powinny zdefiniować kody FACILITY_RPC jako prawne. E_UNEXPECTED jest określonym kodem błędu, który większość deweloperów chce uczynić powszechnie legalną.
Tematy pokrewne
-
obsługa błędów w COM