我的函数GetErrorString()传递了一个错误代码,该错误代码是WSAGetLastError()的结果,或者是我的DLL中定义的错误代码之一,当无法完成对我的DLL函数的调用时,将返回这些错误代码。

我有一个std :: pairs数组,用于存储我的错误代码及其const char *错误字符串

std::pair<int, const char*> errorCodeArray[12] =
{
    std::pair<int,char*>(0,"Success"),
    std::pair<int,char*>(1,"Connection Error"),
    std::pair<int,char*>(2,"Request Timed Out"),
    // ..etc
};


如果错误代码来自WSAGetLastError(),那么我必须使用FormatMessage以LPWSTR的形式获取错误字符串,然后将其转换为char *,我找到了以下页面:

How do I convert from LPCTSTR to std::string?

并尝试了这种显然与LPCTSTR配合使用的灵魂

int size = WideCharToMultiByte(CP_ACP, 0, errCode, -1, 0, 0, NULL, NULL);
char* buf = new char[size];
WideCharToMultiByte(CP_ACP, 0, errCode, -1, buf, size, NULL, NULL);
std::string str(buf);
delete[] buf;
return str.c_str();


但它似乎不适用于LPWSTR,结果始终是“ ???????????”而且我对字符编码的理解还不够,无法找到解决方案。

谁能对此有所启发?谢谢。

最佳答案

FormatMessage()作为两个功能提供:


FormatMessageA()
FormateMessageW()


显式使用FormatMessageA()以避免转换的必要。

尽管这不能直接回答问题,但它消除了将LPWSTR转换为char*的要求,从而提供了解决方案。

07-25 20:44