system_error.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "system_error.h"
  2. #include <Windows.h>
  3. namespace am {
  4. std::string system_error::error2str(unsigned long error)
  5. {
  6. DWORD system_locale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
  7. HLOCAL local_buf = nullptr;
  8. BOOL ret = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
  9. | FORMAT_MESSAGE_ALLOCATE_BUFFER,
  10. NULL,
  11. error,
  12. system_locale,
  13. (PSTR) &local_buf,
  14. 0,
  15. NULL);
  16. if (!ret) {
  17. HMODULE hnetmsg = LoadLibraryExA("netmsg.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
  18. if (hnetmsg != nullptr) {
  19. ret = FormatMessageA(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS
  20. | FORMAT_MESSAGE_ALLOCATE_BUFFER,
  21. hnetmsg,
  22. error,
  23. system_locale,
  24. (PSTR) &local_buf,
  25. 0,
  26. NULL);
  27. FreeLibrary(hnetmsg);
  28. }
  29. }
  30. std::string error_str;
  31. if (ret) {
  32. error_str = (char*) LocalLock(local_buf);
  33. LocalFree(local_buf);
  34. }
  35. return error_str;
  36. }
  37. } // namespace am