Bagikan melalui


CException Kelas

Kelas dasar untuk semua pengecualian di Pustaka Kelas Microsoft Foundation.

Sintaks

class AFX_NOVTABLE CException : public CObject

Anggota

Konstruktor Publik

Nama Deskripsi
CException::CException Membuat CException objek.

Metode Publik

Nama Deskripsi
CException::Delete CException Menghapus objek.
CException::ReportError Melaporkan pesan kesalahan dalam kotak pesan kepada pengguna.

Keterangan

Karena CException adalah kelas dasar abstrak yang tidak dapat Anda buat CException objek secara langsung; Anda harus membuat objek kelas turunan. Jika Anda perlu membuat kelas gaya Anda sendiri CException, gunakan salah satu kelas turunan yang tercantum di atas sebagai model. Pastikan kelas turunan Anda juga menggunakan IMPLEMENT_DYNAMIC.

Kelas turunan dan deskripsinya tercantum di bawah ini:

Nama Deskripsi
CSimpleException Kelas dasar untuk pengecualian MFC yang penting sumber daya
CInvalidArgException Kondisi pengecualian argumen tidak valid
CMemoryException Pengecualian kehabisan memori
CNotSupportedException Permintaan operasi yang tidak didukung
CArchiveException Pengecualian khusus arsip
CFileException Pengecualian khusus file
CResourceException Sumber daya Windows tidak ditemukan atau tidak dapat dikremasi
COleException Pengecualian OLE
CDBException Pengecualian database (yaitu, kondisi pengecualian yang timbul untuk kelas database MFC berdasarkan open Database Koneksi ivity)
COleDispatchException Pengecualian pengiriman OLE (otomatisasi)
CUserException Pengecualian yang menunjukkan bahwa sumber daya tidak dapat ditemukan
CDaoException Pengecualian objek akses data (yaitu, kondisi pengecualian yang timbul untuk kelas DAO)
CInternetException Pengecualian internet (yaitu, kondisi pengecualian yang timbul untuk kelas Internet).

Pengecualian ini dimaksudkan untuk digunakan dengan THROWmakro , , THROW_LAST, trycatch, and_catch, dan end_catch . Untuk informasi selengkapnya tentang pengecualian, lihat Pemrosesan Pengecualian, atau lihat artikel Penanganan Pengecualian (MFC).

Untuk menangkap pengecualian tertentu, gunakan kelas turunan yang sesuai. Untuk menangkap semua jenis pengecualian, gunakan CException, lalu gunakan CObject::IsKindOf untuk membedakan di antara CExceptionkelas -turunan. Perhatikan bahwa CObject::IsKindOf hanya berfungsi untuk kelas yang dideklarasikan dengan IMPLEMENT_DYNAMIC makro, untuk memanfaatkan pemeriksaan jenis dinamis. Kelas turunan apa pun CExceptionyang Anda buat juga harus menggunakan IMPLEMENT_DYNAMIC makro.

Anda dapat melaporkan detail tentang pengecualian kepada pengguna dengan memanggil GetErrorMessage atau ReportError, dua fungsi anggota yang berfungsi dengan salah satu kelas turunan CException.

Jika pengecualian ditangkap oleh salah satu makro, CException objek dihapus secara otomatis; jangan hapus sendiri. Jika pengecualian ditangkap dengan menggunakan catch kata kunci, pengecualian tersebut tidak dihapus secara otomatis. Lihat artikel Penanganan Pengecualian (MFC) untuk informasi selengkapnya tentang kapan harus menghapus objek pengecualian.

Hierarki Warisan

CObject

CException

Persyaratan

Header:afx.h

CException::CException

Fungsi anggota ini membangun CException objek.

explicit CException(BOOL bAutoDelete);

Parameter

b_AutoDelete
Tentukan TRUE apakah memori untuk CException objek telah dialokasikan pada timbunan. Ini akan menyebabkan CException objek dihapus ketika Delete fungsi anggota dipanggil untuk menghapus pengecualian. Tentukan FALSE apakah CException objek berada di tumpukan atau merupakan objek global. Dalam hal ini, CException objek tidak akan dihapus saat fungsi anggota dipanggil Delete .

Keterangan

Anda biasanya tidak perlu memanggil konstruktor ini secara langsung. Fungsi yang melemparkan pengecualian harus membuat instans kelas -turunan CExceptiondan memanggil konstruktornya, atau harus menggunakan salah satu fungsi MFC throw, seperti AfxThrowFileException, untuk melemparkan jenis yang telah ditentukan sebelumnya. Dokumentasi ini disediakan hanya untuk kelengkapan.

CException::Delete

Fungsi ini memeriksa untuk melihat apakah CException objek dibuat pada tumpukan, dan jika demikian, fungsi ini memanggil delete operator pada objek.

void Delete();

Keterangan

Saat menghapus CException objek, gunakan Delete fungsi anggota untuk menghapus pengecualian. Jangan gunakan operator secara delete langsung, karena CException objek mungkin objek global atau telah dibuat pada tumpukan.

Anda dapat menentukan apakah objek harus dihapus saat objek dibuat. Untuk informasi selengkapnya, lihat CException::CException .

Anda hanya perlu memanggil Delete jika Anda menggunakan mekanisme C++- trycatch. Jika Anda menggunakan makro TRY MFC dan CATCH, maka makro ini akan secara otomatis memanggil fungsi ini.

Contoh

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

Panggil fungsi anggota ini untuk melaporkan teks kesalahan dalam kotak pesan kepada pengguna.

virtual int ReportError(
    UINT nType = MB_OK,
    UINT nMessageID = 0);

Parameter

nType
Menentukan gaya kotak pesan. Terapkan kombinasi gaya kotak pesan apa pun ke kotak. Jika Anda tidak menentukan parameter ini, defaultnya adalah MB_OK.

nMessageID
Menentukan ID sumber daya (entri tabel string) dari pesan yang akan ditampilkan jika objek pengecualian tidak memiliki pesan kesalahan. Jika 0, pesan "Tidak ada pesan kesalahan yang tersedia" ditampilkan.

Tampilkan Nilai

Nilai AfxMessageBox ; jika tidak, 0 jika tidak ada cukup memori untuk menampilkan kotak pesan. Lihat AfxMessageBox untuk kemungkinan nilai yang dikembalikan.

Contoh

Berikut adalah contoh penggunaan CException::ReportError. Untuk contoh lain, lihat contoh untuk CATCH.

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

Baca juga

CObject Kelas
Bagan Hierarki
Pemrosesan Pengecualian