Makro GetExceptionCode
Mengambil kode yang mengidentifikasi jenis pengecualian yang terjadi. Fungsi hanya dapat dipanggil dari dalam ekspresi filter atau blok handler pengecualian dari handler pengecualian.
Catatan
Microsoft C/C++ Optimizing Compiler menafsirkan fungsi ini sebagai kata kunci, dan penggunaannya di luar sintaks penanganan pengecualian yang sesuai menghasilkan kesalahan pengkompilasi.
Sintaks
DWORD GetExceptionCode(void);
Parameter
Makro ini tidak memiliki parameter.
Menampilkan nilai
Nilai yang dikembalikan mengidentifikasi jenis pengecualian. Tabel berikut mengidentifikasi kode pengecualian yang dapat terjadi karena kesalahan pemrograman umum. Nilai-nilai ini didefinisikan dalam WinBase.h dan WinNT.h.
Menampilkan kode | Deskripsi |
---|---|
|
Utas mencoba membaca dari atau menulis ke alamat virtual yang tidak memiliki akses. Nilai ini didefinisikan sebagai STATUS_ACCESS_VIOLATION. |
|
Utas mencoba mengakses elemen array yang berada di luar batas, dan perangkat keras yang mendasar mendukung pemeriksaan batas. Nilai ini didefinisikan sebagai STATUS_ARRAY_BOUNDS_EXCEEDED. |
|
Titik henti ditemui. Nilai ini didefinisikan sebagai STATUS_BREAKPOINT. |
|
Utas mencoba membaca atau menulis data yang tidak selaras pada perangkat keras yang tidak memberikan penyelarasan. Misalnya, nilai 16-bit harus diratakan pada batas 2-byte, nilai 32-bit pada batas 4-byte, dan sebagainya. Nilai ini didefinisikan sebagai STATUS_DATATYPE_MISALIGNMENT. |
|
Salah satu operan dalam operasi floating point adalah denormal. Nilai denormal adalah nilai yang terlalu kecil untuk diwakili sebagai nilai titik float standar. Nilai ini didefinisikan sebagai STATUS_FLOAT_DENORMAL_OPERAND. |
|
Utas mencoba membagi nilai titik float dengan pembagi titik float 0 (nol). Nilai ini didefinisikan sebagai STATUS_FLOAT_DIVIDE_BY_ZERO. |
|
Hasil dari operasi floating point tidak dapat direpresentasikan persis sebagai pecahan desimal. Nilai ini didefinisikan sebagai STATUS_FLOAT_INEXACT_RESULT. |
|
Pengecualian titik mengambang yang tidak disertakan dalam daftar ini. Nilai ini didefinisikan sebagai STATUS_FLOAT_INVALID_OPERATION. |
|
Eksponen operasi floating point lebih besar dari besaran yang diizinkan oleh jenis yang sesuai. Nilai ini didefinisikan sebagai STATUS_FLOAT_OVERFLOW. |
|
Tumpukan telah meluap atau mengalami underflow, karena operasi floating point. Nilai ini didefinisikan sebagai STATUS_FLOAT_STACK_CHECK. |
|
Eksponen operasi floating point kurang dari besaran yang diizinkan oleh jenis yang sesuai. Nilai ini didefinisikan sebagai STATUS_FLOAT_UNDERFLOW. |
|
Memori yang diakses utas dialokasikan dengan pengubah PAGE_GUARD. Nilai ini didefinisikan sebagai STATUS_GUARD_PAGE_VIOLATION. |
|
Utas mencoba menjalankan instruksi yang tidak valid. Nilai ini didefinisikan sebagai STATUS_ILLEGAL_INSTRUCTION. |
|
Utas mencoba mengakses halaman yang tidak ada, dan sistem tidak dapat memuat halaman. Misalnya, pengecualian ini mungkin terjadi jika koneksi jaringan hilang saat menjalankan program melalui jaringan. Nilai ini didefinisikan sebagai STATUS_IN_PAGE_ERROR. |
|
Utas mencoba membagi nilai bilangan bulat dengan pembagi bilangan bulat 0 (nol). Nilai ini didefinisikan sebagai STATUS_INTEGER_DIVIDE_BY_ZERO. |
|
Hasil operasi bilangan bulat menciptakan nilai yang terlalu besar untuk dipegang oleh register tujuan. Dalam beberapa kasus, ini akan menghasilkan sedikit hasil yang paling signifikan. Beberapa operasi tidak mengatur bendera carry. Nilai ini didefinisikan sebagai STATUS_INTEGER_OVERFLOW. |
|
Handler pengecualian mengembalikan disposisi yang tidak valid ke dispatcher pengecualian. Programmer yang menggunakan bahasa tingkat tinggi seperti C tidak boleh mengalami pengecualian ini. Nilai ini didefinisikan sebagai STATUS_INVALID_DISPOSITION. |
|
Utas menggunakan handel ke objek kernel yang tidak valid (mungkin karena telah ditutup.) Nilai ini didefinisikan sebagai STATUS_INVALID_HANDLE. |
|
Utas mencoba melanjutkan eksekusi setelah pengecualian yang tidak dapat dilanjutkan terjadi. Nilai ini didefinisikan sebagai STATUS_NONCONTINUABLE_EXCEPTION. |
|
Utas mencoba menjalankan instruksi dengan operasi yang tidak diizinkan dalam mode komputer saat ini. Nilai ini didefinisikan sebagai STATUS_PRIVILEGED_INSTRUCTION. |
|
Perangkap jejak atau mekanisme instruksi tunggal lainnya menandakan bahwa satu instruksi dijalankan. Nilai ini didefinisikan sebagai STATUS_SINGLE_STEP. |
|
Utas menggunakan tumpukannya. Nilai ini didefinisikan sebagai STATUS_STACK_OVERFLOW. |
|
Konsolidasi bingkai telah dijalankan. |
Keterangan
Fungsi GetExceptionCode hanya dapat dipanggil dari dalam ekspresi filter atau blok handler pengecualian dari handler pengecualian. Ekspresi filter dievaluasi jika pengecualian terjadi selama eksekusi blok __try , dan menentukan apakah blok __except dijalankan atau tidak.
Ekspresi filter dapat memanggil fungsi filter. Fungsi filter tidak dapat memanggil GetExceptionCode. Namun, nilai pengembalian GetExceptionCode dapat diteruskan sebagai parameter ke fungsi filter. Nilai yang dikembalikan dari fungsi GetExceptionInformation juga dapat diteruskan sebagai parameter ke fungsi filter. GetExceptionInformation mengembalikan pointer ke struktur yang menyertakan informasi kode pengecualian.
Saat handler berlapis ada, setiap ekspresi filter dievaluasi hingga salah satunya dievaluasi sebagai EXCEPTION_EXECUTE_HANDLER atau EXCEPTION_CONTINUE_EXECUTION. Setiap ekspresi filter dapat memanggil GetExceptionCode untuk mendapatkan kode pengecualian.
Kode pengecualian yang dikembalikan adalah kode yang dihasilkan oleh pengecualian perangkat keras, atau kode yang ditentukan dalam fungsi RaiseException untuk pengecualian yang dihasilkan perangkat lunak.
Saat menangani pengecualian titik henti, penting untuk menambah penunjuk instruksi dalam rekaman konteks untuk melanjutkan dari pengecualian ini.
Contoh
Misalnya, lihat Menggunakan Handler Pengecualian.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung |
Windows Server 2003 [hanya aplikasi desktop] |
Lihat juga