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より入手してください。
参考
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)