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 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

CObject

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();
}

Ayrıca bkz.

CObject Sınıf
Hiyerarşi Grafiği
Özel Durum İşleme