Bagikan melalui


Penelusuran Kesalahan dan Pelaporan Kesalahan Fungsi Global

Fungsi-fungsi ini menyediakan fasilitas penelusuran kesalahan dan pelacakan yang berguna.

Nama Deskripsi
AtlHresultFromLastError Mengembalikan GetLastError kode kesalahan dalam bentuk HRESULT.
AtlHresultFromWin32 Mengonversi kode kesalahan Win32 menjadi HRESULT.
AtlReportError IErrorInfo Menyiapkan untuk memberikan detail kesalahan kepada klien.
AtlThrow Melempar .CAtlException
AtlThrowLastWin32 Panggil fungsi ini untuk memberi sinyal kesalahan berdasarkan hasil fungsi GetLastErrorWindows .

AtlHresultFromLastError

Mengembalikan nilai kode kesalahan terakhir alur panggilan dalam bentuk HRESULT.

HRESULT AtlHresultFromLastError();

Keterangan

AtlHresultFromLastErrorGetLastError memanggil untuk mendapatkan kesalahan terakhir dan mengembalikan kesalahan setelah mengonversinya ke HRESULT menggunakan makro HRESULT_FROM_WIN32.

Persyaratan

Header: atlcomcli.h

AtlHresultFromWin32

Mengonversi kode kesalahan Win32 menjadi HRESULT.

AtlHresultFromWin32(DWORD error);

Parameter

kesalahan
Nilai kesalahan yang akan dikonversi.

Keterangan

Mengonversi kode kesalahan Win32 menjadi HRESULT, menggunakan makro HRESULT_FROM_WIN32.

Catatan

Alih-alih menggunakan HRESULT_FROM_WIN32(GetLastError()), gunakan fungsi AtlHresultFromLastError.

Persyaratan

Header: atlcomcli.h

AtlReportError

IErrorInfo Menyiapkan antarmuka untuk memberikan informasi kesalahan kepada klien objek.

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCOLESTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCOLESTR lpszDesc,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCSTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    LPCSTR lpszDesc,
    DWORD dwHelpID,
    LPCSTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    UINT nID,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());

HRESULT WINAPI AtlReportError(
    const CLSID& clsid,
    UINT nID,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());

Parameter

clsid
[di] CLSID objek yang melaporkan kesalahan.

lpszDesc
[di] String yang menjelaskan kesalahan. Versi Unicode menentukan bahwa lpszDesc berjenis LPCOLESTR; versi ANSI menentukan jenis LPCSTR.

iid
[di] IID antarmuka yang menentukan kesalahan atau GUID_NULL jika kesalahan ditentukan oleh sistem operasi.

hRes
[di] HRESULT yang ingin Anda kembalikan ke pemanggil.

Nid
[di] Pengidentifikasi sumber daya tempat string deskripsi kesalahan disimpan. Nilai ini harus terletak antara 0x0200 dan 0xFFFF, secara inklusif. Dalam build debug, ASSERT akan menghasilkan jika nID tidak mengindeks string yang valid. Dalam build rilis, string deskripsi kesalahan akan diatur ke "Kesalahan Tidak Diketahui."

dwHelpID
[di] Pengidentifikasi konteks bantuan untuk kesalahan.

lpszHelpFile
[di] Jalur dan nama file bantuan yang menjelaskan kesalahan.

hInst
[di] Handel ke sumber daya. Secara default, parameter ini adalah __AtlBaseModuleModule::GetResourceInstance, di mana __AtlBaseModuleModule adalah instans global CAtlBaseModule atau kelas yang berasal darinya.

Tampilkan Nilai

Jika parameter hRes bukan nol, mengembalikan nilai hRes. Jika hRes adalah nol, maka empat versi AtlReportError pertama pengembalian DISP_E_EXCEPTION. Dua versi terakhir mengembalikan hasil MAKE_HRESULT makro( 1, FACILITY_ITF, nID ).

Keterangan

String lpszDesc digunakan sebagai deskripsi teks kesalahan. Ketika klien menerima hRes yang Anda kembalikan dari AtlReportError, klien dapat mengakses IErrorInfo struktur untuk detail tentang kesalahan.

Contoh

STDMETHODIMP CMyControl::MyErrorProneMethod()
{
   BOOL bSucceeded = ErrorProneFunc();
   if (bSucceeded)
      return S_OK;
   else
      // hRes is set to DISP_E_EXCEPTION
      return AtlReportError(GetObjectCLSID(), L"My error message");
}

Perhatian

Jangan gunakan AtlReportError di C++ catch handler. Beberapa penggantian fungsi ini menggunakan makro konversi string ATL secara internal, yang pada gilirannya _alloca menggunakan fungsi secara internal. Menggunakan AtlReportError dalam handler tangkapan C++ dapat menyebabkan pengecualian di handler tangkapan C++.

Persyaratan

Header: atlcom.h

AtlThrow

Panggil fungsi ini untuk memberi sinyal kesalahan berdasarkan kode status HRESULT.

__declspec(noreturn) inline void AtlThrow(HRESULT hr);

Parameter

Hr
Nilai HRESULT standar.

Keterangan

Fungsi ini digunakan oleh kode ATL dan MFC jika terjadi kondisi kesalahan. Ini juga dapat dipanggil dari kode Anda sendiri. Implementasi default fungsi ini tergantung pada definisi simbol _ATL_NO_EXCEPTIONS dan pada jenis proyek, MFC atau ATL.

Dalam semua kasus, fungsi ini melacak HRESULT ke debugger.

Di Visual Studio 2015 Update 3 dan yang lebih baru, fungsi ini dikaitkan __declspec(noreturn) untuk menghindari peringatan SAL yang memacu.

Jika _ATL_NO_EXCEPTIONS tidak didefinisikan dalam proyek MFC, fungsi ini melempar CMemoryException atau COleException berdasarkan nilai HRESULT.

Jika _ATL_NO_EXCEPTIONS tidak didefinisikan dalam proyek ATL, fungsi akan melempar CAtlException.

Jika _ATL_NO_EXCEPTIONS didefinisikan, fungsi menyebabkan kegagalan pernyataan alih-alih melemparkan pengecualian.

Untuk proyek ATL, dimungkinkan untuk menyediakan implementasi Anda sendiri dari fungsi ini untuk digunakan oleh ATL jika terjadi kegagalan. Untuk melakukan ini, tentukan fungsi Anda sendiri dengan tanda tangan yang sama dengan AtlThrow dan #define AtlThrow menjadi nama fungsi Anda. Ini harus dilakukan sebelum menyertakan atlexcept.h (yang berarti bahwa itu harus dilakukan sebelum menyertakan header ATL karena atlbase.h termasuk atlexcept.h). Atribut fungsi __declspec(noreturn) Anda untuk menghindari peringatan SAL yang memacu.

Contoh

// Constructors and operators cannot return error codes, and
// so they are the place where exceptions are generally used.
class CMyClass
{
private:
   CComPtr<IBuddy> m_spBuddy;
public:
   CMyClass()
   {
      HRESULT hr = m_spBuddy.CoCreateInstance(CLSID_Buddy);
      if (FAILED(hr))
         AtlThrow(hr);
   }
   //   methods ..
};

Persyaratan

Header: atldef.h

AtlThrowLastWin32

Panggil fungsi ini untuk memberi sinyal kesalahan berdasarkan hasil fungsi GetLastErrorWindows .

inline void AtlThrowLastWin32();

Keterangan

Fungsi ini melacak hasil GetLastError debugger.

Jika _ATL_NO_EXCEPTIONS tidak didefinisikan dalam proyek MFC, fungsi ini melempar CMemoryException atau COleException berdasarkan nilai yang dikembalikan oleh GetLastError.

Jika _ATL_NO_EXCEPTIONS tidak didefinisikan dalam proyek ATL, fungsi akan melempar CAtlException.

Jika _ATL_NO_EXCEPTIONS didefinisikan, fungsi menyebabkan kegagalan pernyataan alih-alih melemparkan pengecualian.

Persyaratan

Header: atldef.h

Lihat juga

Fungsi
Makro Penelusuran Kesalahan dan Pelaporan Kesalahan