我知道GetLastError
將在錯誤發生時立即被調用。我寫的函數:我可以在我的函數的第一行啓動`GetLastError`嗎?
void PrintErrorMsg() {
DWORD errCode = GetLastError();
LPTSTR msg = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errCode, 0, (LPTSTR)&msg, 0, NULL);
wcerr << msg << endl;
HeapFree(GetProcessHeap(), 0, msg);
}
現在我用它在我的代碼:
LPCTSTR boundaryName = L"BushmanBoundary";
HANDLE hBoundary = CreateBoundaryDescriptor(boundaryName, 0);
if (NULL == hBoundary) {
PrintErrorMsg();
}
所以我的第一個代碼行稱爲GetLastError
的PrintErrorMsg
函數內。這種使用方式是否可以接受?
只要你不調用影響錯誤條件的其他Windows API函數,那麼你應該沒問題。 – PaulMcKenzie
我會將錯誤代碼作爲參數提供給'PrintErrorMsg',並讓調用者在適當的時候調用GetLastError。這使得在你所做的調用和PrintErrorMsg()之間的無代碼「滑入」更明顯和更安全。 –
是@ Christian.K,我也是。但是*沒有任何參數的情況下的行爲*對我來說也很有趣。 –