This commit is contained in:
2022-02-24 23:06:05 +08:00
parent 4bdef58fe5
commit 159baf0442
2 changed files with 26 additions and 0 deletions

14
err.cpp
View File

@@ -69,3 +69,17 @@ char* err_get_errno_message(int errnum) {
if (!cpp2c::string2char(msg, tmp)) return nullptr; if (!cpp2c::string2char(msg, tmp)) return nullptr;
return tmp; return tmp;
} }
#if _WIN32
bool err::get_winerror(std::string& out, int32_t errnum) {
LPWSTR errbuf;
DWORD len;
if (!(len = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, errnum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&errbuf, 0, nullptr))) {
if (errbuf) LocalFree(errbuf);
return false;
}
bool re = wchar_util::wstr_to_str(out, std::wstring(errbuf, len), CP_UTF8);
LocalFree(errbuf);
return re;
}
#endif

12
err.h
View File

@@ -1,6 +1,9 @@
#ifndef _UTILS_ERR_H #ifndef _UTILS_ERR_H
#define _UTILS_ERR_H #define _UTILS_ERR_H
#if __cplusplus #if __cplusplus
extern "C" {
#include <stdint.h>
}
#include <string> #include <string>
namespace err { namespace err {
@@ -11,6 +14,15 @@ namespace err {
* @returns true if successed * @returns true if successed
*/ */
bool get_errno_message(std::string &out, int errnum); bool get_errno_message(std::string &out, int errnum);
#if _WIN32
/**
* @brief Get error message for HRESULT
* @param out Output string
* @param errnum HRESULT
* @return true if successed
*/
bool get_winerror(std::string &out, int32_t errnum);
#endif
} }
extern "C" { extern "C" {
#endif #endif