| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/fml/platform/win/errors_win.h" |
| |
| #include <Windows.h> |
| |
| #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, // dwFlags |
| NULL, // lpSource |
| last_error, // dwMessageId |
| MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // dwLanguageId |
| (LPWSTR)&buffer, // lpBuffer |
| 0, // nSize |
| NULL // Arguments |
| ); |
| |
| std::wstring message(buffer, size); |
| |
| ::LocalFree(buffer); |
| |
| std::wstringstream stream; |
| stream << message << " (" << last_error << ")."; |
| |
| return WideStringToUtf8(stream.str()); |
| } |
| |
| } // namespace fml |