Сохраняет ли CString код GetLastError?

Мне нужно опубликовать отладочную информацию в журнал, используя MFC CString, но я не могу найти, если он сохраняет код ошибки, установленный последним WinAPI (и может быть получен с помощью GetLastError)?

РЕДАКТИРОВАТЬВот пример кода упрощенной версии того, что я сейчас делаю в моем существующем проекте:

HANDLE hFile = CreateFile(strFilePath, ...);
if(hFile == INVALID_HANDLE_VALUE)
{
logError(collectDebuggerInfo(strFilePath));
}

void logError(LPCTSTR pStrDesc)
{
int nLastError = ::GetLastError();
CString str;
str.Format(L"LastError=%d, Description: %s", nLastError, pStrDesc);

//Add 'str' to the logging file...
}

CString collectDebuggerInfo(LPCTSTR pFilePath)
{
int nLastError = ::GetLastError();
CString str;

str.Format(L"Debugging info for file: \"%s\"", pFilePath);

::SetLastError(nLastError);
return str;   //RETURNING CString -- will it overwrite the last error?
}

-1

Решение

Одним из удобных решений было бы определить класс, который содержит как CString, так и код последней ошибки, а затем перегрузить logError и переопределить collectDebuggerInfo что-то вроде этого:

void logError(StringWithEmbeddedErrorCode instr)
{
LPCTSTR pStrDesc = instr.str;
SetLastError(instr.nLastError);
logError(pStrDesc);
}

StringWithEmbeddedErrorCode collectDebuggerInfo(LPCTSTR pFilePath)
{
int nLastError = ::GetLastError();
CString str;

str.Format(L"Debugging info for file: \"%s\"", pFilePath);

return StringWithEmbeddedErrorCode(str, nLastError);
}

Таким образом, вам не нужно менять код, который вызывает функции обработки ошибок.

0

Другие решения


По вопросам рекламы [email protected]