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.
Microsoft Foundation Sınıf Kitaplığı'ndaki tüm özel durumlar için temel sınıf.
Sözdizimi
class AFX_NOVTABLE CException : public CObject
Üyeler
Ortak Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
CException::CException |
Bir CException nesne oluşturur. |
Genel Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
CException::Delete |
Nesneyi CException siler. |
CException::ReportError |
Kullanıcıya ileti kutusundaki bir hata iletisini bildirir. |
Açıklamalar
CException Soyut bir temel sınıf olduğundan, nesneleri doğrudan oluşturamazsınızCException; türetilmiş sınıflardan nesneler oluşturmanız gerekir. Kendi CExceptionstil sınıfınızı oluşturmanız gerekiyorsa, model olarak yukarıda listelenen türetilmiş sınıflardan birini kullanın. Türetilmiş sınıfınızın da kullandığına IMPLEMENT_DYNAMICemin olun.
Türetilmiş sınıflar ve açıklamaları aşağıda listelenmiştir:
| Veri Akışı Adı | Açıklama |
|---|---|
CSimpleException |
Kaynak açısından kritik MFC özel durumları için temel sınıf |
CInvalidArgException |
Geçersiz bağımsız değişken özel durum koşulu |
CMemoryException |
Bellek yetersiz özel durumu |
CNotSupportedException |
Desteklenmeyen işlem isteği |
CArchiveException |
Arşive özgü özel durum |
CFileException |
Dosyaya özgü özel durum |
CResourceException |
Windows kaynağı bulunamadı veya creatable değil |
COleException |
OLE özel durumu |
CDBException |
Veritabanı özel durumu (açık veritabanı bağlantısına dayalı MFC veritabanı sınıfları için ortaya çıkan özel durum koşulları) |
COleDispatchException |
OLE gönderimi (otomasyon) özel durumu |
CUserException |
Kaynağın bulunamadığını gösteren özel durum |
CDaoException |
Veri erişim nesnesi özel durumu (dao sınıfları için ortaya çıkan özel durum koşulları) |
CInternetException |
İnternet özel durumu (İnternet sınıfları için ortaya çıkan özel durum koşulları). |
Bu özel durumlar , , THROW_LAST, try, catch, and_catchve end_catch makrolarıyla THROWbirlikte kullanılmak üzere tasarlanmıştır. Özel durumlar hakkında daha fazla bilgi için Özel Durum İşleme'ye veya Özel Durum İşleme (MFC) makalesine bakın.
Belirli bir özel durumu yakalamak için uygun türetilmiş sınıfı kullanın. Tüm özel durum türlerini yakalamak için kullanın CExceptionve sonra türetilmiş sınıflar arasında CExceptionayrım yapmak için kullanınCObject::IsKindOf. CObject::IsKindOf Dinamik tür denetiminden yararlanmak için yalnızca makroyla IMPLEMENT_DYNAMIC bildirilen sınıflarda çalıştığını unutmayın. Oluşturduğunuz herhangi bir CExceptiontüretilmiş sınıf da makroyu IMPLEMENT_DYNAMIC kullanmalıdır.
özel durumlar hakkındaki ayrıntıları veya ReportErrorçağırarak GetErrorMessage kullanıcıya bildirebilirsiniz, 'nin türetilmiş sınıflarından herhangi biriyle CExceptionçalışan iki üye işlevi.
Bir özel durum makrolardan biri tarafından yakalanırsa, CException nesne otomatik olarak silinir; kendiniz silmeyin. Bir özel durum anahtar catch sözcük kullanılarak yakalanırsa, otomatik olarak silinmez. Özel durum nesnesinin ne zaman silineceği hakkında daha fazla bilgi için Özel Durum İşleme (MFC) makalesine bakın.
Devralma Hiyerarşisi
CException
Gereksinimler
Üstbilgi: afx.h
CException::CException
Bu üye işlevi bir CException nesnesi oluşturur.
explicit CException(BOOL bAutoDelete);
Parametreler
b_AutoDelete
Nesne belleğinin CException yığında ayrılacağını belirtinTRUE. Bu, özel durumu silmek için üye işlevi çağrıldığında Delete nesnenin silinmesine neden olurCException. Nesnenin CException yığında mı yoksa genel bir nesne mi olduğunu belirtinFALSE. Bu durumda, CException üye işlevi çağrıldığında Delete nesne silinmez.
Açıklamalar
Normalde bu oluşturucuyu doğrudan çağırmanız gerekmez. Özel durum oluşturan bir işlev, türetilmiş bir CExceptionsınıfın örneğini oluşturup oluşturucusunu çağırmalı veya önceden tanımlanmış bir tür oluşturmak için gibi AfxThrowFileExceptionMFC throw işlevlerinden birini kullanmalıdır. Bu belgeler yalnızca eksiksizlik için sağlanır.
CException::Delete
Bu işlev, nesnenin CException yığında oluşturulup oluşturulmadığını denetler ve oluşturulduysa nesnedeki delete işleci çağırır.
void Delete();
Açıklamalar
Bir CException nesneyi silerken, özel durumu silmek için üye işlevini kullanın Delete . Nesne genel bir nesne olabileceğinden veya yığında oluşturulmuş olabileceğinden işlecini doğrudan CException kullanmayındelete.
Nesne oluşturulduğunda nesnenin silinip silinmeyeceğini belirtebilirsiniz. Daha fazla bilgi için bkz. CException::CException.
Yalnızca C++ try- catch mekanizmasını kullanıyorsanız çağırmanız Delete gerekir. ve MFC makrolarını TRY CATCHkullanıyorsanız, bu makrolar bu işlevi otomatik olarak çağırır.
Örnek
CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception, and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
// Note that this example performs the same actions as the
// example for CATCH, but uses C++ try/catch syntax instead
// of using the MFC TRY/CATCH macros. This sample must use
// CException::Delete() to delete the exception objects
// before closing the catch block, while the CATCH example
// implicitly performs the deletion via the macros.
try
{
pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
CFile::modeRead | CFile::shareDenyNone);
ULONGLONG ullLength = pFile->GetLength();
CString str;
str.Format(_T("Your SYSTEM.INI file is %u bytes long."), ullLength);
AfxMessageBox(str);
}
catch(CFileException* pEx)
{
// Simply show an error message to the user.
pEx->ReportError();
pEx->Delete();
}
catch(CMemoryException* pEx)
{
// We can't recover from this memory exception, so we'll
// just terminate the app without any cleanup. Normally, an
// an application should do everything it possibly can to
// clean up properly and _not_ call AfxAbort().
pEx->Delete();
AfxAbort();
}
// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
pFile->Close();
delete pFile;
}
CException::ReportError
İleti kutusundaki hata metnini kullanıcıya bildirmek için bu üye işlevini çağırın.
virtual int ReportError(
UINT nType = MB_OK,
UINT nMessageID = 0);
Parametreler
nType
İleti kutusunun stilini belirtir. kutuya ileti kutusu stillerinin herhangi bir bileşimini uygulayın. Bu parametreyi belirtmezseniz, varsayılan değer olur MB_OK.
nMessageID
Özel durum nesnesinde hata iletisi yoksa görüntülenecek iletinin kaynak kimliğini (dize tablosu girdisi) belirtir. 0 ise, "Kullanılabilir hata iletisi yok" iletisi görüntülenir.
Dönüş Değeri
Bir AfxMessageBox değer; aksi takdirde ileti kutusunu görüntülemek için yeterli bellek yoksa 0 olur. Olası dönüş değerleri için bkz AfxMessageBox .
Örnek
aşağıda kullanımına bir örnek verilmiştır CException::ReportError. Başka bir örnek için CATCHörneğine bakın.
CFile fileInput;
CFileException ex;
// try to open a file for reading.
// The file will certainly not
// exist because there are too many explicit
// directories in the name.
// if the call to Open() fails, ex will be
// initialized with exception
// information. the call to ex.ReportError() will
// display an appropriate
// error message to the user, such as
// "\Too\Many\Bad\Dirs.DAT contains an
// invalid path." The error message text will be
// appropriate for the
// file name and error condition.
if (!fileInput.Open(_T("\\Too\\Many\\Bad\\Dirs.DAT"), CFile::modeRead, &ex))
{
ex.ReportError();
}
else
{
// the file was opened, so do whatever work
// with fileInput we were planning...
fileInput.Close();
}