Visual C++ düzeneği yükseltme alma'nın özel durumu değiştirme

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

175784
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Not Microsoft Visual C++ .NET 2002 ve Visual C++ .NET 2003, Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler. Bu makaledeki bilgiler yalnızca yönetilmeyen Visual C++ kod uygulanır.Microsoft Visual C++ 2005, Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler.
Özet
Istemci uygulamanızın oluşturmak için alma kullanarak, özel durum nesne yöntemi için bir sarmalayıcı başarısız bir HRESULT karşılaştığında _com_error özel durum sınıfı aracılığıyla işleme tanıtır. Bu mekanizma, kendi uygulama ile değiştirmek için geçerli nedenleri olabilir.
Daha fazla bilgi
Alma ve yüklü başarısız HRESULTS için özel durumlar oluşturmak, iki yolu vardır. Ilk raw_interfaces_only yan tümcesi alma deyimiyle kullanmaktır. Ancak, bu alma sağlayan bir sarmalayıcı sınıfları avantajlarından bazıları olumsuzlar.

Kendi uygulamanız için aşağıdaki prototip ve varsayılan uygulaması olan _com_raise_error sağlayarak, ikinci yöntem ise:
void __stdcall _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0)   throw(_com_error);   void __stdcall   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo ) throw(_com_error)   {       throw _com_error(hr, perrinfo);   } 				
bu işlev bildirilen ancak COMDEF.H dosyasında uygulanmadı. Kendi uygulamanızda bir .OBJ sağlarsanız, the linker, karşıt olarak COMSUPP.LIB getirme kullanır. yalnızca, kolaylıkla kodunuz tarafından değiştirilebilir; böylece kendi COMSUPP.LIB nesnesinde _com_raise_error bulunmaktadır.

Aşağıda, uygulama'alma [NULL]'ın özel durum yükseltmeyi fonksiyonunun örneğidir:
Not: Şu anda bizim derleyici, bir işlev özel durum belirtimi yok sayar ve uyarı oluşturur:
C4290 Uyarı: C++ özel durum belirtimi yoksayıldı.
Bir işlevin her bildirimi bir özel durum belirtimi, tanımı, dahil olmak üzere, tüm bildirimlerden sahipse, göre C++ teknik inceleme bu işlevi, aynı tür kimlikleri kümesini içeren bir özel durum belirtimi sahip.
void __stdcall   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo ) throw(_com_error)       {           //this message box is for demonstration purpose only          AfxMessageBox( "_com_raise_error (HRESULT, IErrorInfo*)" );           //your own error handling code or just an abort       }#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF" )       _bstr_t     bstrEmpty(L"");       _ConnectionPtr  Conn1 = NULL;       Conn1.CreateInstance( __uuidof( Connection ) );       Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty,0 ); 					
Bu kod, herhangi bir geçerli bağlantı bilgilerini girmeden bir ADO bağlantı nesnesi açmak çalışır. _Com_raise_error değiştirerek, _com_error yükseltilmiş engelledi.

Bu işlev yalnızca değiştirdiyseniz, ancak, yine de için özel durumları yakalamak gereksiniminiz olabilir, çünkü. Kod parçacığının göz önünde bulundurun.
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF" )    _ConnectionPtr  Conn1 = NULL;    // Conn1.CreateInstance( __uuidof( Connection ) );    Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty ,0); 				
Böyle bir durumda, Conn1 geçerli bir nesne değil ve bu varolmayan bir nesneye arabirim işaretçisi çağrılan _com_raise_erro kaynaklanan bir NULL. Ancak, fazla yüklenmiş işleç-> yöntemi, derleyici sonra bir Win32 durum kaynaklanan Open yöntemi çağırma girişiminde, boş bir arabirimi döndürecektir. Bu durum, Open'ı çağırmadan önce ilk BOş için sınama Conn1 engeller.

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 175784 - Son İnceleme: 02/21/2014 23:17:49 - Düzeltme: 5.0

  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • kbnosurvey kbarchive kbmt kbhowto kbdatabase kbinfo KB175784 KbMttr
Geri bildirim