2011-01-08 4 views
2

私はwin32のC++アプリケーションでwinsock2を使用しています。 MessageBoxでWSAGetLastError()を呼び出して取得できるネットワークエラーを表示します。これどうやってするの?私はのFormatMessageを見ましたが、私は、例えば、以下のような検索エラー・システムのメッセージテーブル内のコードとはLPTSTR Errorでフォーマットされたメッセージを配置する方法、それはWSAエラーコード用の書式付きメッセージの取得

答えて

3
ここ

だを使用することができます使用方法を理解していませんでしたバッファ。

// Create a reliable, stream socket using TCP. 

if ((sockClient = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) 
{ 
DWORD err = GetLastError(); 
LPTSTR Error = 0; 

if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 
     NULL, 
     err, 
     0, 
     (LPTSTR)&Error, 
     0, 
     NULL) == 0) 
    { 
    // Failed in translating the error. 
    } 
} 
+0

私は2つの質問があります:なぜ簡単にエラーを書き込むことができますLPTSTRにキャスト&エラーする必要がありますか?そして私はLocalFree(エラー)でメモリを解放する必要がありますか? – Stefano

+0

ポインタ(ポインタへのポインタの型を期待する)のアドレスを別のポインタに渡すので、 'FORMAT_MESSAGE_ALLOCATE_BUFFER'フラグは' LPSTRエラー 'によって指し示されるメッセージのバッファを割り当てることになっているためです。必要がなくなったらメモリを解放する必要があります。 – cpx

+0

新しいアプリケーションは、 'LocalFree()'の代わりに['HeapFree()'](https://msdn.microsoft.com/en-us/library/aa366701(v = vs.85).aspx)を使うべきです。この場合、 'HeapFree(GetProcessHeap()、0、Error)'が必要です。 https://msdn.microsoft.com/en-us/library/aa366596(v=vs.85).aspx – Tim

関連する問題