Aracılığıyla paylaş


Hata işleme ve dönüş değerleri

VSPackages ve COM, hatalar için aynı mimariyi kullanır. SetErrorInfo ve GetErrorInfo işlevleri Win32 uygulama programlama arabiriminin (API) bir parçasıdır. Tümleşik geliştirme ortamındaki (IDE) herhangi bir VSPackage, hata bildirimi alırken zengin hata bilgilerini kaydetmek için bu genel Win32 API'lerini çağırabilir. Visual Studio SDK'sı, hata bilgilerini yönetmek için birlikte çalışma derlemeleri sağlar.

Birlikte çalışma yöntemleri

Kolaylık olması için IDE, SetErrorInfoWin32 API'lerini çağırmak yerine kullanmak üzere bir yöntemi sağlar. Yönetilen kodda kullanın SetErrorInfo. Hata iletisinin görüntülenmesi gereken düzeye bir hata HRESULT geldiğinde (bu genellikle bir IOleCommandTarget komut işleyicisi uygulayan nesnedir), IDE uygun ileti kutusunu görüntülemek için başka bir yöntem ReportErrorInfokullanır. Yönetilen kodda yöntemini kullanın ReportErrorInfo .

VSPackage uygulayıcısı olarak, COM nesneleriniz normalde uygular ISupportErrorInfo. Arabirim, ISupportErrorInfo zengin hata bilgilerinin çağrı zincirinde dikey olarak hareket etmesini sağlar. İşlemler veya iş parçacıkları arasında kullanılabilecek nesneler, zengin hata bilgilerinin çağırana doğru şekilde sıralandığından emin olmak için desteklemelidir ISupportErrorInfo .

VSPackage'larla ilgili olan ve düzenleyici fabrikaları, düzenleyiciler, hiyerarşiler ve sunulan hizmetler de dahil olmak üzere IDE'yi genişletmeye katılan tüm nesneler zengin hata bilgilerini desteklemelidir. IDE bu VSPackage nesnelerinin uygulamasını ISupportErrorInfogerektirmese de, her zaman teşvik edilir.

IDE, hata bilgilerini raporlamaktan ve bir IDE'ye her yayılışında HRESULT Visual Studio kullanıcısına görüntülemekle sorumludur. IDE aynı zamanda nesne oluşturmaya ErrorInfo yönelik mekanizmadır.

Genel yönergeler

VSPackage uygulamanızın SetErrorInfo içindeki hataları ayarlamak ve raporlamak için ve ReportErrorInfo yöntemlerini de kullanabilirsiniz. Ancak genel bir kural olarak, VSPackage'ınızdaki hata iletilerini işlemeye yönelik şu yönergeleri izleyin:

  • VSPackage COM nesnelerinizde uygulama ISupportErrorInfo .

  • uygulayan IOleCommandTargetnesnelerde yöntemini çağıran SetErrorInfo bir hata raporlama mekanizması oluşturun.

  • IDE'nin yöntemi aracılığıyla kullanıcılara hata görüntülemesine ReportErrorInfo izin verin.

IDE'de hata bilgileri

Aşağıdaki kurallar, Visual Studio IDE'de hata bilgilerinin nasıl işleneceğini gösterir:

  • Eski hata bilgilerinin kullanıcılara bildirilmediğinden emin olmak için savunma stratejisi olarak, yöntemini çağıran işlevlerin ReportErrorInfo önce yöntemini çağırması SetErrorInfo gerekir. null Yeni hata bilgilerini ayarlayabilecek herhangi bir şeyi çağırmadan önce önbelleğe alınmış hata iletilerini temizlemek için iletin.

  • Hata iletilerini doğrudan bildirmeyen işlevlerin yalnızca hata HRESULTdöndüren yöntemi çağırmasına SetErrorInfo izin verilir. bir işleve girişte veya döndürürken S_OKöğesinin işaretinin temizlenmesine ErrorInfo izin verilebilir. Bu kuralın tek istisnası, bir çağrının alıcı tarafın açıkça kurtarabileceği veya güvenle yoksayabileceği bir hata HRESULT döndürmesidir.

  • Bir hatayı HRESULT açıkça yoksayan herhangi bir taraf ile S_OKyöntemini çağırmalıdırSetErrorInfo. Aksi takdirde, ErrorInfo başka bir taraf kendi ErrorInfosağlamadan bir hata oluşturduğunda nesne yanlışlıkla kullanılabilir.

  • Bir hataya neden olan tüm yöntemlerin zengin hata HRESULT bilgileri sağlamak için yöntemini çağırması SetErrorInfo teşvik edilir. Döndürülen HRESULT özel FACILITY_ITF bir hataysa, uygun ErrorInfo bir nesne sağlamak için yöntemi gereklidir. Döndürülen hata standart bir sistem hatasıysa (örneğin, E_OUTOFMEMORY, E_ABORT, E_INVALIDARG, E_UNEXPECTEDvb.) yöntemi açıkça çağırmadan SetErrorInfo hata kodunu döndürmek kabul edilebilir. Savunma kodlama stratejisi olarak, bir hata HRESULT (sistem hataları dahil) oluştururken, hatanın SetErrorInfo daha ayrıntılı bir şekilde açıklanmasıyla ErrorInfo her zaman yöntemini çağırın.null

  • Başka bir çağrıdan kaynaklanan bir hata döndüren tüm işlevlerin, içinde başarısız olan çağrıdan HRESULT alınan bilgileri nesnesini değiştirmeden geçirmesi ErrorInfo gerekir.

Ayrıca bkz.