2012-03-08 21 views
0

私の関数GetErrorString()には、WSAGetLastError()の結果であるエラーコード、またはDLLで呼び出されたときに返されるDLLに定義されているエラーコードのいずれかが渡されます完了できません。その後、私はエラーを取得するためのFormatMessageを使用する必要がありますLPWSTRをchar */stringに変換する

私は)自分の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(からのものである場合

と一緒に私のエラーコードを格納するのstd ::ペアの配列を持っていますLPWSTRとして文字列、その後のchar *に変換し、私はこのページが見つかりました:

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

を明らかにし、LPCTSTR

で動作するこのsoultionを試してみました
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では動作しないようですが、結果は常に "??????????"私は解決策を理解するのに十分な文字エンコーディングを実際に理解していません。

誰もがこれにいくつかの光を当てることができますか?ありがとう。変換の必要性を回避するために

  • FormatMessageA()
  • FormateMessageW()

使用FormatMessageA()明示:

+0

LPTSTRの_changes_を変換するために機能します。 FormatMessageがFormatMessageWのマクロである場合、stringの代わりにwstringを使用できませんか? –

答えて

2

FormatMessage()は二つの機能として提供されます。

これは直接質問に答えるわけではありませんが、LPWSTRからchar*に変換する要件を削除して解決策を提供します。あなたがwcstombsに見たいと思うかもしれません

+0

ありがとうhmjdは私が作ろうとしていたよりもはるかに簡単だった –

+0

正確に言うと、* A関数は、デフォルトのコードページを使って、あなたのために変換を行う* W関数のラッパーです。ですから、ある意味では直接の答えです。 – MSalters

+0

@MSalters、私はそれを知らなかった、歓声。 – hmjd

1

は、プロジェクトの設定にエンコードする文字に応じて、LPWSTRまたはLPSTRすることに

関連する問題