Windows函式錯誤處理 (轉)

gugu99發表於2008-07-20
Windows函式錯誤處理 (轉)[@more@]

  當一個時,它首先要檢驗傳遞給它的各個引數的有效性,然後再設法任務.如果傳遞一個無效引數,或者由於某種原因無法執行這項操作,那麼操作就會返回一個值,指明該函式在某種程度上執行失敗了。
  Windows函式常用的返回值型別:
  void
  BOOL:0,非0,TURE,FALSE
   HANDLE:HANDLE,NULL,INVALID_HANDLE_VALID)
   PVOID:NULL,PVOID
   LONG/D:具體函式而定
  ...
  編譯了一個所有可能的錯誤程式碼列表,並且為每個錯誤程式碼分配了一個32位的號碼. WinError.h頭(大約2萬多行)包含了Micorsoft定義的錯誤程式碼列表.
  當一個Windows函式檢測到一個錯誤時,它會使用執行緒本地(thread-local storage)機制,將相應的錯誤程式碼號碼與呼叫的執行緒關聯起來.這將使執行緒能夠互相獨立的執行,而不會影響各自的錯誤程式碼.
  當函式返回時,它的返回值就能指明是否有錯誤發生,若有且要確定是什麼錯誤,就需要呼叫DWORD GetLastError()函式,它返回執行緒的32位錯誤程式碼.有一個Error Lookup可用將錯誤程式碼的號碼換成相應文字描述.Windows還提供了一個函式FormatMessage可以將錯誤程式碼轉換成它的文字描述.
DWORD FormatMessage(
  DWORD dwFlags,  // and processing options
  LPCVOID lpSource,  // message source
  DWORD dwMessageId,  // message ntifier
  DWORD dguageId, // language identifier
  LPTSTR lpBuffer,  // message buffer
  DWORD nSize,  // maximum size of message buffer
  va_list *Arguments  // array of message inserts
);
  我們也可以在自己的函式中使用該機制,只需要使用VOID SetLastError(DWORD dwErrCode)函式即可,如果WinError.h中的任何程式碼都不能正確地反映該錯誤的性質,那麼可以建立你自己的程式碼。錯誤程式碼的域的劃分表:
位  31~30  29  28  27~16  15~0
內容  嚴重性  Microsoft/客戶  保留  裝置程式碼  異常程式碼

含義  0=成功  0=MS定義的程式碼  必順是0  由MS定義  由MS或客戶定義
  1=參考
  2=警告  1=客戶定義的程式碼
  3=錯誤

注:如果建立自己的錯誤程式碼,必順使29位為1.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007542/,如需轉載,請註明出處,否則將追究法律責任。

相關文章