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 Konektivitas Database Terbuka) |
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 THROW
makro , , THROW_LAST
, try
catch
, 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 CException
kelas -turunan. Perhatikan bahwa CObject::IsKindOf
hanya berfungsi untuk kelas yang dideklarasikan dengan IMPLEMENT_DYNAMIC
makro, untuk memanfaatkan pemeriksaan jenis dinamis. Kelas turunan apa pun CException
yang 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
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 CException
dan 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++- try
catch
. 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();
}