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」の中に、エラーメッセージの文字列がはいっています。
えてして、メッセージには、「正しく終了しました」みたいな文字がはいっていて、また別の問題に悩まされるのですが・・・。
|
|