-
UI制御
【MFC】CFileDialogの複数選択が1件だけ:バッファ不足を直す
CFileDialogにOFN_ALLOWMULTISELECTを付けて複数選択を有効にすると、DoModalはIDOKを返すのに、選んだはずの件数が返ってきません。必要なのは、ダイアログが返す一覧が全部入る大きさのバッファを自分で用意して、その先頭をm_ofn.lpstrFileに、文字数を... -
デバッグ
【MFC】0xC0000005 アクセス違反の原因を特定する手順:read/writeとアドレス値から絞り込む
Visual Studio でデバッグ実行していたMFCアプリが止まり、出力ウィンドウに0xC0000005という数字だけが残る。よくある現象ですよね。原因はこの1行から絞れます。その行に出る読み取り中か書き込み中かと、直前のアドレス値の2つを最初に読めば、NULLポイ... -
UI制御
【MFC】CEditを数値入力に制限する:ES_NUMBERで防げない符号・小数・貼り付け
数値だけを入れてほしい入力欄にES_NUMBERを付ける、というのはMFCのダイアログでよく見かける書き方です。キーボードから数字以外を打っても入らないのは確かですが、このスタイルが面倒を見るのは打ち込みだけで、入力欄に文字列が入る経路はほかにもあ... -
GDI描画
【MFC】GDI ハンドル上限:CreatePen が NULL を返し始めた瞬間の数を実機で数える
長く動かしている MFC アプリで、線や枠が急に描かれなくなることがあります。GDI オブジェクトを解放しないまま作り続けるとプロセスあたりのハンドル数が上限に達し、そこから先の CreatePen は例外もエラーダイアログも出さずに NULL を返します。 最初... -
ビルド
【MFC】MSB8020: ビルドツールが見つからない:再ターゲットか、古いツールセット追加か
MSB8020 でビルドが止まったとき、直し方は古いツールセットをビルド機に入れるか、プロジェクトを再ターゲットするかです。MFCアプリで後者を選ぶと、exe が要求するMFCランタイムが mfc100.dll や mfc120.dll から14系へ変わり、配布先に入れる再頒布可... -
近代化
【MFC】64bit化でレジストリの設定が読めない:Wow6432Node と KEY_WOW64_32KEY
64bit 化して読めなくなる設定は HKEY_LOCAL_MACHINE\SOFTWARE 配下だけです。CWinApp::SetRegistryKey が使う HKEY_CURRENT_USER\Software\会社名\アプリ名 は共有キーで、32bit 版と 64bit 版が同じ値を見ています。RegOpenKeyEx が 2 を返したときは、... -
デバッグ
【MFC】GetLastError 3「指定されたパスが見つかりません」:コード2との違いと確認順
CreateFileW の直後に GetLastError() を読み、3が返ってきた。そんなときにまず疑うのは、末尾のファイル名ではなく、その手前のディレクトリです。3は ERROR_PATH_NOT_FOUND。似たエラーである2(ERROR_FILE_NOT_FOUND)との違いを、実際の戻り値を見な... -
デバッグ
【MFC】GetLastErrorの数値をFormatMessageで文章にする:メッセージが空になる原因
GetLastError() が返した数値を人が読める文章にするのは FormatMessage です。ところが同じコードで、エラー 2 なら「指定されたファイルが見つかりません。」が返るのに、エラー 193 では戻り値が 0 になって何も入らない。原因はロケールでも権限でもな... -
ビルド
【MFC】mfc140.dllが見つからない:v14再頒布パッケージの対応OSとx86/x64
MFCアプリを起動したときに mfc140.dll が見つからない(または mfc140u.dll)と出たら、まず対象OSとアプリを作ったVisual Studioの世代を確認します。Windows 10 / 11またはWindows Server 2016以降で、Visual Studio 2017〜2026のMSVC Build Toolsを使... -
デバッグ
【MFC】_CrtCheckMemoryでメモリ破壊の発生区間を挟み込む
MFCアプリが、メモリを書き壊した場所では止まらず、後のnewやdeleteで落ちることがあります。最初に置くのは、疑わしい処理の前後にある2つの_CrtCheckMemoryです。前がTRUE、後がFALSEなら、調べる範囲はその間に限れます。 最初に置く2つのチェックポイ...