преобразование LPWSTR в char * / string - PullRequest
0 голосов
/ 08 марта 2012

Моей функции GetErrorString () передается код ошибки, который является либо результатом WSAGetLastError (), либо одним из кодов ошибок, определенных в моей DLL, которые возвращаются, когда вызовы моих функций DLL не могут завершиться.

У меня есть массив std :: пар, которые хранят мои коды ошибок вместе с их постоянными символами * строки ошибок

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, а затем преобразовать ее в символ *, я нашел эту страницу:

Как мне преобразовать LPCTSTR в 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, результат всегда "???????????" и я не очень понимаю кодировку символов, чтобы найти решение.

Может кто-нибудь пролить свет на это? Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

FormatMessage () предоставляется в виде двух функций:

  • FormatMessageA()
  • FormateMessageW()

Использование FormatMessageA() явно, чтобы избежать необходимости конвертации.

Хотя это не дает прямого ответа на вопрос, оно предоставляет решение путем исключения требования о преобразовании из LPWSTR в char*.

1 голос
/ 23 марта 2012

Возможно, вы захотите заглянуть в функцию wcstombs, чтобы преобразовать ее

...