Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Bijna alle COM-functies en interfacemethoden retourneren een waarde van het type HRESULT-. De HRESULT- (de naam kan worden gelezen als 'resultaatgreep') is een manier om een geslaagde, waarschuwings- of foutwaarde te retourneren. Een HRESULT- is eigenlijk geen ingang (zie Waarom begint HRESULT met H als het geen ingang is?); het is slechts een waarde met verschillende velden die erin zijn gecodeerd. Volgens de COM-specificatie geeft een resultaat van nul aan dat het succes is geslaagd en een niet-nulresultaat aangeeft dat de fout is mislukt.
Important
Controleer altijd de retourwaarden van HRESULT. Negeer nooit de retourwaarde van een COM-functie. Gebruik de FAILED() en SUCCEEDED() macro's (gedefinieerd in <winerror.h>) - vergelijk niet rechtstreeks met S_OK, omdat andere succescodes dan S_OK bestaan (bijvoorbeeld S_FALSE):
// ✅ Correct — handles all failure codes
HRESULT hr = pStream->Read(buffer, cbSize, &cbRead);
if (FAILED(hr)) {
// Handle error
return hr;
}
// ❌ Wrong — misses failure codes that aren't E_FAIL
if (hr == E_FAIL) { ... }
// ❌ Wrong — S_FALSE is success but != S_OK
if (hr != S_OK) { /* this fires for S_FALSE too */ }
Moderne helpers voor foutafhandeling:
-
THROW_IF_FAILED(hr)— Windows Implementatiebibliotheken (wil) genereert een C++-uitzondering bij fouten -
winrt::check_hresult(hr)— C++/WinRT-equivalent, worpenwinrt::hresult_error -
LOG_IF_FAILED(hr)— wil macro die zich aanmeldt bij een fout, maar de uitvoering voortzet
Op broncodeniveau bestaan alle foutwaarden uit drie delen, gescheiden door onderstrepingstekens. Het eerste deel is het voorvoegsel dat de faciliteit identificeert die is gekoppeld aan de fout, het tweede deel is E voor fout en het derde deel is een tekenreeks die de werkelijke voorwaarde beschrijft. STG_E_MEDIUMFULL wordt bijvoorbeeld geretourneerd wanneer er geen ruimte overblijft op een harde schijf. De STG voorvoegsel geeft de opslagfaciliteit, de E- aan dat de statuscode een fout vertegenwoordigt en de MEDIUMFULL- specifieke informatie over de fout bevat. Veel van de waarden die u mogelijk wilt retourneren van een interfacemethode of functie, worden gedefinieerd in Winerror.h.
Zie de volgende secties voor meer informatie over foutafhandeling:
- structuur van COM-foutcodes
- codes in FACILITY_ITF
- Macro's gebruiken voor foutafhandeling
- COM-foutafhandeling in Java en Visual Basic
- Strategieën voor foutafhandeling
- onbekende fouten verwerken
Verwante onderwerpen