Bagikan melalui


Penanganan Pengecualian di MFC

Artikel ini menjelaskan mekanisme penanganan pengecualian yang tersedia di MFC. Tersedia dua mekanisme:

  • Pengecualian C++, tersedia di MFC versi 3.0 dan yang lebih baru

  • Makro pengecualian MFC, tersedia di MFC versi 1.0 dan yang lebih baru

Jika Anda menulis aplikasi baru menggunakan MFC, Anda harus menggunakan mekanisme C++. Anda dapat menggunakan mekanisme berbasis makro jika aplikasi yang ada sudah menggunakan mekanisme tersebut secara ekstensif.

Anda dapat dengan mudah mengonversi kode yang ada untuk menggunakan pengecualian C++ alih-alih makro pengecualian MFC. Keuntungan mengonversi kode dan panduan Anda untuk melakukannya dijelaskan dalam artikel Pengecualian: Mengonversi dari Makro Pengecualian MFC.

Jika Anda telah mengembangkan aplikasi menggunakan makro pengecualian MFC, Anda dapat terus menggunakan makro ini dalam kode yang ada, sambil menggunakan pengecualian C++ dalam kode baru Anda. Artikel Pengecualian: Perubahan Makro Pengecualian di Versi 3.0 memberikan panduan untuk melakukannya.

Catatan

Untuk mengaktifkan penanganan pengecualian C++ dalam kode Anda, pilih Aktifkan Pengecualian C++ pada halaman Pembuatan Kode di folder C/C++ kotak dialog Halaman Properti proyek, atau gunakan opsi pengkompilasi /EHsc.

Artikel ini membahas topik berikut ini:

Kapan Menggunakan Pengecualian

Tiga kategori hasil dapat terjadi ketika fungsi dipanggil selama eksekusi program: eksekusi normal, eksekusi keliru, atau eksekusi abnormal. Setiap kategori dijelaskan di bawah ini.

  • Eksekusi normal

    Fungsi dapat dijalankan secara normal dan kembali. Beberapa fungsi mengembalikan kode hasil ke pemanggil, yang menunjukkan hasil fungsi. Kemungkinan kode hasil didefinisikan secara ketat untuk fungsi dan mewakili rentang kemungkinan hasil fungsi. Kode hasil dapat menunjukkan keberhasilan atau kegagalan atau bahkan dapat menunjukkan jenis kegagalan tertentu yang berada dalam rentang ekspektasi normal. Misalnya, fungsi status file dapat mengembalikan kode yang menunjukkan bahwa file tidak ada. Perhatikan bahwa istilah "kode kesalahan" tidak digunakan karena kode hasil mewakili salah satu dari banyak hasil yang diharapkan.

  • Eksekusi keliru

    Pemanggil membuat beberapa kesalahan dalam meneruskan argumen ke fungsi atau memanggil fungsi dalam konteks yang tidak pantas. Situasi ini menyebabkan kesalahan, dan harus dideteksi oleh pernyataan selama pengembangan program. (Untuk informasi selengkapnya tentang pernyataan, lihat Pernyataan C/C++.)

  • Eksekusi abnormal

    Eksekusi abnormal mencakup situasi di mana kondisi di luar kontrol program, seperti memori rendah atau kesalahan I/O, berpengaruh pada hasil fungsi. Situasi abnormal harus ditangani dengan menangkap dan melempar pengecualian.

Menggunakan pengecualian sangat sesuai untuk eksekusi abnormal.

Dukungan Pengecualian MFC

Baik Anda menggunakan pengecualian C++ secara langsung atau menggunakan makro pengecualian MFC, Anda akan menggunakan Kelas CException atau CExceptionobjek turunan yang mungkin dilemparkan oleh kerangka kerja atau oleh aplikasi Anda.

Tabel berikut menunjukkan pengecualian yang telah ditentukan sebelumnya yang disediakan oleh MFC.

Kelas pengecualian Makna
Kelas CMemoryException Kehabisan memori
Kelas CFileException Pengecualian file
Kelas CArchiveException Pengecualian Arsip/Serialisasi
Kelas CNotSupportedException Respons terhadap permintaan layanan yang tidak didukung
Kelas CResourceException Pengecualian alokasi sumber daya Windows
Kelas CDaoException Pengecualian database (kelas DAO)
Kelas CDBException Pengecualian database (kelas ODBC)
Kelas COleException Pengecualian OLE
Kelas COleDispatchException Pengecualian pengiriman (otomatisasi)
Kelas CUserException Pengecualian yang memperingatkan pengguna dengan kotak pesan, lalu melempar Kelas CException generik

Sejak versi 3.0, MFC telah menggunakan pengecualian C++ tetapi masih mendukung makro penanganan pengecualian yang lebih lama, yang mirip dengan pengecualian C++ dalam bentuk. Meskipun makro ini tidak direkomendasikan untuk pemrograman baru, makro ini masih didukung untuk kompatibilitas mundur. Dalam program yang sudah menggunakan makro, Anda juga dapat dengan bebas menggunakan pengecualian C++. Selama praproses, makro mengevaluasi ke kata kunci penanganan pengecualian yang ditentukan dalam implementasi MSVC bahasa C++ pada Visual C++ versi 2.0. Anda dapat membiarkan makro pengecualian yang ada di tempat saat Anda mulai menggunakan pengecualian C++. Untuk informasi tentang mencampur makro dan penanganan pengecualian C++ dan mengonversi kode lama untuk menggunakan mekanisme baru, lihat artikel Pengecualian: Menggunakan Makro MFC dan Pengecualian dan Pengecualian C++: Mengonversi dari Makro Pengecualian MFC. Makro pengecualian MFC yang lebih lama, jika Anda masih menggunakannya, evaluasi ke kata kunci pengecualian C++. Lihat Pengecualian: Perubahan pada Makro Pengecualian di Versi 3.0. MFC tidak secara langsung mendukung penanganan pengecualian terstruktur (SEH) Windows NT, seperti yang dibahas dalam Penanganan Pengecualian Terstruktur.

Bacaan Lebih Lanjut Tentang Pengecualian

Artikel berikut menjelaskan penggunaan pustaka MFC untuk penanganan pengecualian:

Artikel berikut membandingkan makro pengecualian MFC dengan kata kunci pengecualian C++ dan menjelaskan bagaimana Anda dapat menyesuaikan kode Anda:

Baca juga

Praktik terbaik C++ modern untuk pengecualian dan penanganan kesalahan