#include "flutter/fml/platform/win/errors_win.h"
#ifdef WINDOWS_PLATFORM
#include <windows.h>
#else
#include <Windows.h>
#endif
#include <sstream>
#include "flutter/fml/platform/win/wstring_conversion.h"
namespace fml {
std::string GetLastErrorMessage() {
DWORD last_error = ::GetLastError();
if (last_error == 0) {
return {};
}
const DWORD flags = FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS;
wchar_t* buffer = nullptr;
size_t size = ::FormatMessage(
flags,
NULL,
last_error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPWSTR)&buffer,
0,
NULL
);
std::wstring message(buffer, size);
::LocalFree(buffer);
std::wstringstream stream;
stream << message << " (" << last_error << ").";
return WideStringToString(stream.str());
}
}