CException
Sınıf
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 CException
stil 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_DYNAMIC
emin 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_catch
ve end_catch
makrolarıyla THROW
birlikte 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 CException
ve sonra türetilmiş sınıflar arasında CException
ayrı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 CException
tü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 CException
sınıfın örneğini oluşturup oluşturucusunu çağırmalı veya önceden tanımlanmış bir tür oluşturmak için gibi AfxThrowFileException
MFC 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
CATCH
kullanı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();
}