0
GetLastError()
은 어떻게 든 포맷 된 메시지를 얻기 위해 FormatMessageW
으로 전달 될 수 있습니다. 결국 목표는 QString
입니다. 정확하고 안전한 방법은 무엇입니까?GetLastError의 텍스트 표현을 QString으로 가져 오는 방법은 무엇입니까?
GetLastError()
은 어떻게 든 포맷 된 메시지를 얻기 위해 FormatMessageW
으로 전달 될 수 있습니다. 결국 목표는 QString
입니다. 정확하고 안전한 방법은 무엇입니까?GetLastError의 텍스트 표현을 QString으로 가져 오는 방법은 무엇입니까?
트릭을 수행합니다.
QString getLastErrorMsg() {
LPWSTR bufPtr = NULL;
DWORD err = GetLastError();
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, err, 0, (LPWSTR)&bufPtr, 0, NULL);
const QString result =
(bufPtr) ? QString::fromUtf16((const ushort*)bufPtr).trimmed() :
QString("Unknown Error %1").arg(err);
LocalFree(bufPtr);
return result;
}
FormatMessage를 호출 할 때는 항상 FORMAT_MESSAGE_IGNORE_INSERTS를 지정해야합니다. 일부 오류 메시지에는 코드가 인수 목록을 전달하지 않는 한 자리 표시자를 포함하므로 버그가 발생할 수 있습니다. 우리가 NULL을 전달하기 때문에 이것은 일어날 기다리고있는 버그 일 것입니다.