C言語 - VC++ - GetLastError

クラウディア 
1. 概要
2. GetLastError
3. FormatMessage

1. 概要

 一般的な「C言語」では、システム関数あたりを呼ぶと、その結果とは別に、「error.h」内の「error」変数に値が設定されていて、その値を、「strerr」あたりの関数を使用することによって、メッセージ化することができます。  「VC++」でも、同じような仕組みが、全く別の変数や関数を使用することによって実現されています。  本ページは、下記のサイトを参考にさせていただきました。

2. GetLastError


#include <WinBase.h>

DWORD WINAPI GetLastError(VOID);
 てな定義がありまして、「呼び出し側のスレッドが持つ最新のエラーコードを取得する。」ことになっております。

3. FormatMessage

 「FormatMessage」を使用することにより、「GetLastError」で得たエラーコードをメッセージ化することができます。  すなわち。

DWORD	dwError = GetLastError();
LPVOID  lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
			  FORMAT_MESSAGE_FROM_SYSTEM |
			  FORMAT_MESSAGE_IGNORE_INSERTS,
			  NULL, dwError, NULL, (LPSTR)&lpMsgBuf, 0, NULL);

CString	str = (LPCTSTR)lpMsgBuf;
LocalFree(lpMsgBuf);

str.Trim();
 と書いてやれば、変数「str」の中に、エラーメッセージの文字列がはいっています。  えてして、メッセージには、「正しく終了しました」みたいな文字がはいっていて、また別の問題に悩まされるのですが・・・。
earthcar(アースカー)