《Windows核心編程》第一章 讀書筆記

今天讀《Windows核心編程》的第一章:錯誤處理,按照書上的例子寫出了一個ErrorShow的例子,其中涉及到了挺多“核心”的東西,先記錄下來與大家分享

首先我們需要一些基礎知識。

調用Windows函數時,它會先驗證我們傳給他的參數,然後再開始執行任務。如果傳入的參數無效,或者由於其他原因導致操作無法執行,則函數的返回值將給出函數因爲某些原因失敗了。

VOID 這個函數不可能失敗,只有極少數的Windows函數返回值類型爲VOID

BOOL 如果函數失敗,返回值爲0;否則,返回值是一個非0的值。應避免檢測返回值是否爲TRUE;最穩妥的辦法是檢測返回值是否不爲FALSE。

HANDLE 如果函數失敗,則返回值通常爲NULL;否則,HANDLE將標識一個可以操縱的對象。請注意這種返回值,因爲某些函數會返回INVALID_HANDLE_VALUE的一個句柄值,它被定義爲-1。函數的Platform SDK 文檔清楚說明了函數是返回NULL 還是INVALID_HANDLE_VALUE。

PVOID  如果函數調用失敗,則返回NULL;否則,PVOID將標識一個數據塊的內存地址。

LONG/DWORD 這種問題比較棘手。返回計數的函數通常會返回一個LONG或者DWORD。如果函數處於某種原因不能對我們想要計數的東西進行計數,它通常會返回0或-1(具體取決於函數)。如果要調用一個返回LONG/DWORD的函數,務必仔細閱讀Platform SDK文檔,確保我們會正確地檢查可能出現的錯誤。

------摘自《Windows核心編程》

我們可以對這個錯誤代碼用GetLastError()函數進行檢測。

下邊是我根據書本上的例子寫的GetLastErrorMFC程序,其中我只放上LookUp按鈕的OnBnClickd事件

其中需要說明的如下:

HLOCAL 

WinDef.h中發現

typedef HANDLE              HLOCAL;

WinNt.h中發現

typedef void *HANDLE;

原來HANDLEHLOCAL就是void*。自我理解就是指向一塊內存區域的指針。在改程序中,我們在FormatMessage中把它指向了生成的錯誤消息的文本。

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章