我知道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,我也是。但是*没有任何参数的情况下的行为*对我来说也很有趣。 –