Makale numarası: 167802 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
EXCEPTEX teknikler için Win32 yapılandırılmış özel durumlar hem de C++ özel durumlar, yakalama gösteren bir örnektir. C++ için özel durumlar, nasıl yapılır: açık daha sık çözülmesi gösteren işlevleri sağlanan çeşitli yardımcı özel sınıflar kullanılır. Win32 yapılandırılmış özel durumlar için Win32 özel durumu oluşturuldu türünü tanıtan bir yardımcı işlev sağlanır.
Aşağıdaki dosyalar Microsoft Yükleme Merkezi'nden yüklenebilir:
Exceptex.exe
(http://download.microsoft.com/download/vc50ent/sample/1/nt4/en-us/exceptex.exe)
Microsoft destek dosyalarını karşıdan yükleme konusunda ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
119591Microsoft bu dosyada virüs taraması yapmıştır. Microsoft, dosyanın kullanıma sunulduğu tarihteki en güncel virüs tarama yazılımını kullanmıştır. Dosya, üzerinde herhangi bir yetkisiz değişiklik yapılmasını engellemeye yardım eden geliştirilmiş güvenliğe sahip sunucularda depolanır.
(http://support.microsoft.com/kb/119591/EN-US/ )Microsoft Destek Dosyaları Çevrimiçi Hizmetler'den Nasıl Alınır
Win32 ve C++ özel durum işleme birleştirmeC++ özel durum işleme ve Win32 yapılandırılmış özel durum işleme özel durumları yakalamak için farklı bir sözdizimi kullanın.
Temel fark, C++ özel durum işleme üç in imzasız yalnızca Win32 yapılandırılmış özel durum işleme yakalar, ancak bir türünün bir örneği catch umuyor being.
Ancak, C++ hem de Win32 _set_se_translator() işlevi işleme Exception birleştirebilirsiniz. Bu Win32 özel durum işleyici işlevi seçiminizin Win32 özel durum bilgileri, bir sınıf içinde kaydırma ve "gibi bir C++ durum", geçirilecek neden olan özel durum. Bu otomatik olarak, bir Win32 Exception oluşur ve sorunsuz bir C++ özel durum olarak program görünür olur (VC) 5.0 infoviewer özel durum işleme değişiklikleri bakın). Bu sizin için otomatik olarak GÜNLÜK makrolar kullanırsanız yapılır ve ilgili Log() işlevlerini destekler.
Böyle bir durumda, LogEnable bir kez, erken programın yürütülmesine çağrılması ve geçirilen Win32 özel durumlar C++ sözdizimiyle yakalandı. EXCEPTEX örnek bu yukarıda verilen kodu kullanarak gösterir.
C++ özel durumlar türleriBir MFC-tabanlı program tarafından yakalanan iletiler, C++ özel çeşitli kategorileri vardır:
Aşağıda, MFC CException sınıfını gösteren bir işaretçi yakalar LogException işlevde için bildirim örneğidir.
LogException, özel durum makro son çağrı yığını içinde kullanıldığı dosya adı ve satır numarası da izler (bir yardımcıyı LOG kullandıysanız makro).
Bu yardımcı cracks açık özel işlevleri ve sonuçları gerektiğinde işleyebileceği bir dize dizisi depolar. Bu dize dizisine TRACE() makro içeriği Dökümü alma için LogDisplay() işlevidir.
Try/catch basitleştirme Yardımcısı makrolar ile engeller.Try/catch bloğu kodunuzda littering bir süre sonra Karmakarışık alabilirsiniz. Ancak, özel durum blokları, makroları basitleştirmek mümkündür. Bu işlemi basitleştirmek için üç makroları EXCEPTEX sağlar ve her günlük/özel durum işleme için farklı işlevler sağlar. Makroları her de yazılır Visual C++ 4.X ve Visual C++ 5.0 için kullandığınız Derleyici sürümü işaretlemeniz gerekir; böylece çalışılır.
Aşağıda makrolar, LOGQ (sessiz özel durum işleme hiçbir günlüğü ile) en basit olanıdır. Bu, kodunuzda bRetVal adlı bir Boolean değişkeni kullanılabilir umuyor. Makro bir özel duruma neden olabilir kodun yürütülmesine izin verebilir böylece doğru olmalıdır ve, bir özel duruma neden oldu, FALSE olarak ayarlar.
#Ifdef _MSC_VER Visual C++ 4.X veya 5. 0'de belirli için makroyu tanımını kısıtlar. Sürüm 5.0 için yeni sunulan _com_error özel durum (alma işlemi oluşturulan kod tarafından üretilen) bir catch içerir.
Aşağıda gösterildiği gibi LOGQ kullanırsınız:
EXCEPTEX tarafından sağlanan <a1>LOG</a1> makroları diğer iki sürümü vardır. Ikinci LOG makronun, yukarıda açıklanan yüklenmiş LogException() yardımcıları kullanır.
Bu makro yok yapmak bayrak bRetVal kullanın. Her zaman tarafından makro kapsüllenmiş kod yürütmesine, geçirilen tüm özel durumları yakalamak ve içeriklerini oturum.
LOGR, EXCEPTEX tarafından sağlanan son LOG makro LOGQ hem LOGE birleştirir. Kodu yürütmesine ve artırılıyor herhangi bir özel durum oturum, görmek için denetler.
Diğer bir kullanışlı işlevlerEXCEPTEX örnek özel durum işleme yardımcı olmak üzere üç daha fazla işlev sağlar:
LogDisplay() TRACE makroları aracılığıyla dışında tüm kütüğe kaydedilmiş özel içeriği dökümünü alır.
LogDisplay (...) Tüm kütüğe kaydedilmiş için özel durumlar CListBox örneğini içeriğini dökümünü alır.
LogSaveToFile (...) Içeriği dışında tüm kütüğe kaydedilmiş özel bir dosyaya döker.
LOG.H ve LOG.CPPLOG.H ve LOG.CPP tüm özel durumları işlemeye EXCEPTEX kodu içerir. Örnek geri kalanı LOG.H ve LOG.CPP bulunan makrolara/işlevleri göstermektir. Bu iki dosyayı varolan bir projeye kolayca eklenebilir ve ya da Visual C++ 4.X içinde derlemeye yazdınız veya altında ANSI hem UNICODE 5.0 oluşturur. Bunları kullanmak için <a0></a0>, # ekleyin "log.h" LOGE veya LOGR makro kullanan dosyaları içerir. Win32 için yapılandırılmış özel durumlar da çözmek istiyorsanız, programınızı başlangıcına yakın bir kez olarak LogEnable çağırmalısınız.
LOG makro istediğiniz verilerin alınacağı veri özel durum kodunu ekleyin.
Dosyası ve satır numarası bildirdi Not yığında son LOG makro olacaktır. MyFunction() myFun1() ve myFun2() çağırırsa, her GÜNLÜK bir makro işlev çağrısı çıktının hangi çağrısı bir özel durum oluştu görüntülemek için kaydırma gerekecektir.
Her zaman LOG kullanmak istemeyebilirsiniz makroları veya sağlanan bile LogException() yardımcıları. Her bir kullanışlı olarak sunulur ve gibi kapsamlı bir özel durum işleme göstermek için iyi ve sonuçları, herhangi bir özel durum günlüğünü yakalandı. End-all, özel durum her üretim ortamında işleme için olması-tüm olarak sağlanmaz.
SORUN GİDERMEAşağıdaki kod nasıl yardımcı makroları
i, yalnızca ilk LOGQ makro kapsamında tanımlandığı gibi bu kodu bir derleyici hata üretir. LOGQ biçimde genişler unutmayın:
/ W4 ve almaVisual C++ ve alma /W4 bayrağı kullanıyorsanız, 8 uyarıları alma kullanan içerme dosyaları teslim oluşturulan görürsünüz.
comutil.h(905): C4310 Uyarı: oyuncu sabit değeri tamsayıya yuvarlar.Bu hata iletileri sayılabilir ve kodunuzu etkilememelidir.
comutil.h(928): C4310 Uyarı: oyuncu sabit değeri tamsayıya yuvarlar.
comutil.h(1030): C4310 Uyarı: oyuncu sabit değeri tamsayıya yuvarlar.
comutil.h(1281): C4310 Uyarı: oyuncu sabit değeri tamsayıya yuvarlar.
comutil.h(1307): C4310 Uyarı: oyuncu sabit değeri tamsayıya yuvarlar.
comutil.h(1476): C4310 Uyarı: oyuncu sabit değeri tamsayıya yuvarlar.
comdef.h(242): C4244 Uyarı: 'iade': 'int' dan 'imzasız kısa', olası kaybını verileri dönüştürme
Daha fazla bilgi içinAşağıdaki VC ++ 5.0 infoviewer konuya özel durum teknikleri işleme için iyi bir giriş sunar:
Özel durum işleme: Sık sorulan sorularAşağıdaki makalede DAO SDK özel durum işlenecek EXCEPTEX örnek genişletmek için kullanılacak teknikler gösterilmiştir.
MK:@IVT:vccore/F26/D2A/S31BE4.HTM
Özel durum işleme farklar
MK:@IVT:vccore/F26/D2B/S4CC99.HTM
152695Win32 özel durum işleme üzerinde kesin bir kaynak bulunamıyor:
(http://support.microsoft.com/kb/152695/EN-US/ )Nasıl tut ve özel durumlar, SDK-based DAO Şifre Çöz
"Gelişmiş Windows" tarafından Jeffrey Richter, ISBN 1-57231-548-2
Makale numarası: 167802 - Last Review: 7 Şubat 2014 Cuma - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
Machine-translated Article
Ö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.
Makalenin İngilizcesi aşağıdaki gibidir:167802
(http://support.microsoft.com/kb/167802/en-us/ )