08/02/25 01:28:46
こんな感じでいいのか?
LPTSTR name = NULL, newptr;
DWORD len = 32, rlen;
do {
rlen = 0;
len *= 2;
if ( (newptr = (LPTSTR)realloc(name, len * sizeof(TCHAR))) == NULL ) break;
name = newptr;
} while ( (rlen = GetModuleFileName(NULL, name, len)) == len );
if ( rlen ) _putts(name);
free(name);
始め、GetLastErrorを使った切り捨てチェックで実装しようとして気付いたのだが、
SDK for WindowsVista 付属のドキュメントで、
GetModuleFileNameがバッファが小さくて切り捨てした時、
ERROR_INSUFFICIENT_BUFFERがセットされる、とあるけどこれ嘘だな。
いつからか誤った記述が紛れ込んだ予感。