Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Neredeyse tüm COM işlevleri ve arabirim yöntemleri HRESULT türünde bir değer döndürür. HRESULT ("sonuç tanıtıcısı" olarak okunabilir), başarı, uyarı veya hata değeri döndürmenin bir yoludur. HRESULT aslında bir tanıtıcı değildir (bkz. HRESULT hiçbir şeyin tutamacı olmadığında neden H ile başlar?); yalnızca içinde birkaç alanın kodlanmış olduğu bir değerdir. COM belirtimine göre sıfır sonucu başarıyı, sıfır olmayan bir sonuç ise başarısız olduğunu gösterir.
Important
HRESULT dönüş değerlerini her zaman denetleyin. COM işlevinin dönüş değerini asla yoksaymayın.
FAILED() ve SUCCEEDED() makrolarını kullanın (içinde <winerror.h>tanımlanır) — dışında bir başarı kodu S_OK olduğundan (örneğin, ) ile doğrudan S_OKkarşılaştırmayınS_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 */ }
Hata işleme için modern yardımcılar:
-
THROW_IF_FAILED(hr)— Windows Uygulama Kitaplıkları (wil) hatada bir C++ özel durumu oluşturur -
winrt::check_hresult(hr)— C++/WinRT eşdeğeri, atarwinrt::hresult_error -
LOG_IF_FAILED(hr)— Hatada oturum açan ancak yürütmeye devam eden wil makro
Kaynak kod düzeyinde, tüm hata değerleri alt çizgilerle ayrılmış üç bölümden oluşur. İlk bölüm hatayla ilişkili tesisi tanımlayan ön ek, ikinci bölüm hata için E, üçüncü bölüm ise gerçek koşulu açıklayan bir dizedir. Örneğin, sabit diskte yer kalmadığında STG_E_MEDIUMFULL döndürülür. STG öneki depolama tesisini, E durum kodunun bir hatayı temsil ettiğini gösterir ve MEDIUMFULL hata hakkında belirli bilgiler sağlar. Bir arabirim yönteminden veya işlevinden döndürmek isteyebileceğiniz değerlerin çoğu Winerror.h içinde tanımlanır.
Hata işleme hakkında daha fazla bilgi için aşağıdaki bölümlere bakın:
- COM Hata Kodlarının Yapısı
- FACILITY_ITF 'da Kodları
- Hata İşleme için Makroları Kullanma
- Java ve Visual Basic COM Hata İşleme
- Hata İşleme Stratejileri
- Bilinmeyen Hataları İşleme
İlgili konular