MFC で簡単なテスト アプリケーションを使用していますが、動作しません。メッセージ ハンドラは単に呼び出されません。ウィンドウはメッセージを受け取りますが、メッセージ マップに登録されているハンドラーを呼び出しません。
これは、ボタンの巨大なブロックを持ち、それらを押すとライブラリへのさまざまな呼び出しを行う、標準の mfc 単一ダイアログ アプリケーションです。ただし、ハンドラーは呼び出されません。
追跡しましたが、メッセージ マップが破損しているようです。次のような標準宣言があります。
BEGIN_MESSAGE_MAP(CommLib_test_x86Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDCANCEL, &CommLib_test_x86Dlg::OnBnClickedCancel)
ON_BN_CLICKED(IDOK, &CommLib_test_x86Dlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CommLib_test_x86Dlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CommLib_test_x86Dlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CommLib_test_x86Dlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CommLib_test_x86Dlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CommLib_test_x86Dlg::OnBnClickedButton5)
// many more buttons, but I commented the rest out for test
END_MESSAGE_MAP()
ON_WM_
そして、最初の* に (つまり静的メソッドに)ブレークポイントを置いGetThisMessageMap
てメッセージ マップの内容を見ると、最初のエントリは正しいのですが、残りはほとんど 0であり、配列のサイズは実際の定義と一致しません。 . デバッガーは値を次のように報告します
[0] {nMessage=274 nCode=0 nID=0 ...}
[1] {nMessage=0 nCode=0 nID=0 ...}
[2] {nMessage=0 nCode=19 nID=4206192 ...}
[3] {nMessage=55 nCode=0 nID=0 ...}
[4] {nMessage=0 nCode=0 nID=0 ...}
[5] {nMessage=0 nCode=0 nID=0 ...}
[6] {nMessage=0 nCode=0 nID=0 ...}
[7] {nMessage=0 nCode=0 nID=0 ...}
[8] {nMessage=0 nCode=0 nID=0 ...}
[9] {nMessage=0 nCode=0 nID=0 ...}
[10] {nMessage=0 nCode=0 nID=0 ...}
[11] {nMessage=0 nCode=0 nID=0 ...}
[12] {nMessage=0 nCode=0 nID=0 ...}
[13] {nMessage=0 nCode=0 nID=0 ...}
[14] {nMessage=0 nCode=0 nID=0 ...}
[15] {nMessage=0 nCode=0 nID=0 ...}
コードは、警告などなしで正常にコンパイルされます。
アプリケーションはプロジェクトの膨大なコレクションの一部であり、それらのプロジェクトはコンパイラ オプションを共有することに注意することが重要です。実際にビジュアル スタジオ プロジェクトを生成しますが、.vsprops
ファイルを使用する前です。私はしばらくプロジェクトを使用していませんでしたが、その間にコンパイラフラグが変更された可能性があります。