HRESULT - HRESULT

Nın alanında bilgisayar Programlama, HRESULT bir veri tipi Windows işletim sistemlerinde ve önceki IBM / Microsoft OS / 2 işletim sisteminde hata koşullarını ve uyarı koşullarını temsil etmek için kullanılır.

HRESULT'ların asıl amacı, OS / 2 işletim sisteminin farklı alt sistemlerindeki hata kodları arasındaki çarpışmaları önlemek için hem genel hem de Microsoft dahili kullanımı için resmi olarak hata kodu aralıkları düzenlemekti.

HRESULT'lar sayısal hata kodlarıdır. Bir HRESULT içindeki çeşitli bitler, hata kodunun doğası ve nereden geldiği hakkındaki bilgileri kodlar.

HRESULT hata kodlarıyla en sık karşılaşılan COM standartlaştırılmış bir COM hata işleme kuralı için temel oluşturdukları programlama.

HRESULT biçimi

Bir HRESULT değeri, üç alana bölünmüş 32 bit içerir: a ciddiyet kod, bir tesis kod ve bir hata kodu. Önem kodu, dönüş değerinin bilgi, uyarı veya hatayı temsil edip etmediğini gösterir. Tesis kodu, hatadan sorumlu sistemin alanını tanımlar. Hata kodu, istisnayı temsil etmek için atanan benzersiz bir numaradır. Her istisna, farklı bir HRESULT ile eşleştirilir.

Tesis, tesis adı veya başka bir ayırt edici tanımlayıcıdır; Önem derecesi, işlev çağrısının başarılı mı (S) yoksa bir hata mı oluşturduğunu (E) gösteren tek bir harf, S veya E'dir; ve Neden, kodun anlamını tanımlayan bir tanımlayıcıdır. Örneğin, STG_E_FILENOTFOUND durum kodu, depolamayla ilgili bir hatanın meydana geldiğini gösterir; özellikle, istenen bir dosya mevcut değil. Bir HRESULT değerinin işaretsiz bir onaltılık değer olarak gösterilebileceği unutulmamalıdır. [1]

HRESULT'lar şu şekilde düzenlenir:[2]

Bit313029282726252423222120191817161514131211109876543210
AlanSRCNXTesisKod

Biçim ayrıntıları

  • S - Önem - başarılı / başarısız olduğunu gösterir
    • 0 - Başarı
    • 1 - Başarısızlık
  • R - Tesis kodunun ayrılmış kısmı, NT'nin ikinci önem bitine karşılık gelir.
    • 1 - Ciddi Başarısızlık
  • C - Müşteri. Bu bit, değerin müşteri tarafından mı yoksa Microsoft tarafından mı tanımlandığını belirtir.
    • 0 - Microsoft tanımlı
    • 1 - Müşteri tanımlı
  • N - Tesis kodunun ayrılmış kısmı. Eşlenmiş bir NT durum değerini belirtmek için kullanılır.
  • X - Tesis kodunun ayrılmış kısmı. Dahili kullanım için ayrılmıştır. Durum değerleri olmayan ancak bunun yerine ekran dizeleri için ileti kimlikleri olan HRESULT değerlerini belirtmek için kullanılır.
  • Tesis - hatadan sorumlu olan sistem hizmetini gösterir. Örnek tesis kodları aşağıda gösterilmiştir (tam liste için bkz. [2]).
    • 1 - RPC
    • 2 - Gönderim (COM gönderimi)
    • 3 - Depolama (OLE depolama)
    • 4 - ITF (COM / OLE Arayüzü yönetimi)
    • 7 - Win32 (ham Win32 hata kodları)
    • 8 - Windows
    • 9 - SSPI
    • 10 - Kontrol
    • 11 - CERT (İstemci veya sunucu sertifikası)
    • ...
  • Kod - tesisin durum kodudur

ITF tesis kodu, daha sonra COM bileşenlerinin kendi bileşene özgü hata kodlarını tanımlayabildiği aralık olarak geri dönüştürüldü.

HRESULTs nasıl çalışır?

HRESULT, bir işlevden başarılı bir dönüş için sıfır veya pozitif ve başarısızlık için negatif olarak tanımlanan opak bir sonuç tutamacıdır. Genellikle başarılı işlevler, S_OK HRESULT değeri (sıfıra eşittir). Ancak nadir durumlarda, işlevler ek bilgilerle birlikte başarı kodları döndürebilir; S_FALSE = 0x01.

HRESULT'lar görüntülendiğinde, genellikle bir imzasız onaltılık değer, genellikle bir 0x önek. Bu durumda, başarısızlığı gösteren bir sayı, onaltılık şekil 8 veya üstü ile başlayarak tanımlanabilir.

HRESULT'lar ilk olarak IBM / Microsoft OS / 2 işletim sisteminde genel amaçlı bir hata dönüş kodu olarak tanımlanmış ve daha sonra Windows NT'de benimsenmiştir. Microsoft Visual Basic, aşağıdakileri ilişkilendirerek HRESULT hata raporlama mekanizmalarını önemli ölçüde geliştirmiştir. IErrorInfo HRESULT hata kodlu nesne, iş parçacığı yerel depolamadaki bir IErrorInfo COM nesnesine bir işaretçi depolayarak. IErrorInfo mekanizması, programların çok çeşitli bilgileri belirli bir HRESULT hatasıyla ilişkilendirmesine izin verir: hatayı ortaya çıkaran nesnenin sınıfı, hatayı ortaya çıkaran nesnenin arabirimi, hata metni; ve bir yardım dosyasındaki bir yardım konusuna bağlantı. Ek olarak, bir HRESULT hatasının alıcıları, istek üzerine hata mesajı için yerelleştirilmiş metin elde edebilir.

Ardından, HRESULT ve ilişkili IErrorInfo mekanizması COM'da varsayılan hata raporlama mekanizması olarak kullanılmıştır.

Windows'ta IErrorInfo mekanizmasının desteği oldukça tutarsızdır. Daha eski Windows API'leri bunu hiç destekleme eğiliminde olmayıp, HRESULT'ları herhangi bir IErrorInfo veri. Daha modern Windows COM alt sistemleri genellikle IErrorInfo nesnesinin mesaj açıklamasında kapsamlı hata bilgileri sağlar. IErrorInfo hata mekanizmalarının daha gelişmiş özellikleri - yardım bağlantıları ve isteğe bağlı yerelleştirme - nadiren kullanılır.

İçinde .NET Framework, HRESULT / IErrorInfo hata kodları, CLR yerelden yönetilen koda geçişteki istisnalar; ve CLR istisnaları, yönetilen durumdan yerel düzene geçerken HRESULT / IErrorInfo hata kodlarına çevrilir COM kodu.

HRESULT'ları kullanma

winerror.h dosyası bazı genel HRESULT değerlerini tanımlar. Sabit kodlanmış HRESULT değerleri bazen belirli bir alt sistem için ilişkili başlık dosyalarında (.h dosyaları) kodlanır. Bu değerler ayrıca Microsoft Windows Platformları ile ilgili başlık (.h) dosyalarında tanımlanır. SDK veya DDK.

HRESULT döndüren bir aramanın başarılı olup olmadığını kontrol etmek için, S alan 0'dır (yani sayı negatif değildir) veya FAILED () makrosunu kullanın. Elde etmek için Kod HRESULT'un parçası ise, HRESULT_CODE () makrosunu kullanın. Ayrıca adlı bir aracı da kullanabilirsiniz. ERR.EXE değeri alıp ilgili hata dizesine çevirmek için. Başka bir araç aradı ERRLOOK.EXE belirli bir HRESULT değeriyle ilişkili hata dizelerini görüntülemek için de kullanılabilir. ERRLOOK.EXE bir Görsel stüdyo Komut istemi.

Windows yerel SetErrorInfo ve GetErrorInfo API'ler, HRESULT dönüş kodlarını karşılık gelen bir IErrorInfo nesne.

FormatMessage API işlevi, bazı IErrorInfo HRESULT'ları kullanıcı tarafından okunabilir bir dizeye dönüştürmek için kullanılabilir.

Örnekler

  • 0x80070005
    • 0x8 - Başarısızlık
    • 0x7 - Win32
    • 0x5 - "E_FAULT"
  • 0x80090032
    • 0x8 - Başarısızlık
    • 0x9 - SSPI
    • 0x32 - "İstek desteklenmiyor"[3]

Referanslar

  1. ^ "COM Hata Kodlarının Yapısı".
  2. ^ a b MSDN Windows Hata Kodu başvurusu. Referans 24 Eylül 2014'te yeniden doğrulandı
  3. ^ [1] Win32 Hata Kodları

Dış bağlantılar