ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

GetLastError()の結果をCStringで出力するクラス

GetLastError()で得たエラーコードを毎回FormatMessageで変換するのが面倒だったので、両者をひとまとめにしてCStringまたはLPCTSTRで返すクラスを作った。

注意!

LPCTSTRは一時オブジェクトのアドレスを返すので、長時間使わないこと。すぐに無効なアドレスとなるので、LPCTSTRで返り値を受け取る場合は速やかに別バッファにコピーすること。コピーしなくていいのは、MessageBox(LPCTSTR message)等の引数に使うときなど、一時オブジェクトが生きている場合に限定される。

コード

上から順に、

・使用例

・本体のcpp

・本体の.h

です。

Get CString object from GetLastError information

2020/02/22追記:Gistのコードを変更しました。

■Example.cpp

  • Visual Studioの出力ウィンドウにメッセージを出すだけのサンプルを追加。

■GetLastErrorToString.cpp

  • Visual Studio2019以降はstdafx.hがpch.hに変更となったため、対応。なお#include "pch.h"以前に書かれた#ifdef等はプリヘッダのコンパイラからは無視されてしまうため、_MFC_VERを使った#includeの切り替えはできない。ひどい。
  • Visual Studioの出力ウィンドウにメッセージを出すコードがUnicodeのみの対応だったためマルチバイトコードにも対応するようUNICODE定義により切り替えるようにした。なぜ_RPTTNが定義されていないのかは謎。不便なので自作したものがあるが、今回のものには含めず。興味ある方は以下からコピペまたはGist内のDownloadより入手してください。

donadona.hatenablog.jp

参考

System Error Codes (0-499) (Windows) 

System Error Codes (500-999) (Windows)

System Error Codes (1000-1299) (Windows)

System Error Codes (1300-1699) (Windows)

System Error Codes (1700-3999) (Windows)

System Error Codes (4000-5999) (Windows)

System Error Codes (6000-8199) (Windows)

System Error Codes (8200-8999) (Windows)

System Error Codes (9000-11999) (Windows)

System Error Codes (12000-15999) (Windows)