くだらないプログラムを作っていて大体動いてきたのでDEBUG版をRELEASE版にしたら動かない。昔もそんなことがあってそのときは
・Message MAPの定義が狂っていた
が原因だった。今回もそれが原因か?と思って見直してみたのだがどうも一応あっている。それでAfxMessageBox()をそこここに入れてどこで落ちているかを調べた。なんとm_wndXX.SetWindowText("*")で落ちてる。なぜに?しばらくしてOnChangeEditXX()が動いていることが分かったのだがなんとreturn後に落ちている。訳わからん。でも関数の定義を見直していて分かった、なんかオリジナル定義と違って引数が多い!!真の原因はこれだ
・オリジナルは.hでafx_msg void OnChangeEditXX();となっていたのを他の処理と共用するために
afx_msg void OnChangeEditXX(BOOL bCompati=FALSE);
と定義し直してあった。そう言えばそんなことしてたっけ。随分ほったらかしにしていて忘れてたよ。素直に
.h
afx_msg void OnChangeEditXX();
void OnChangeEditXX(BOOL bCompati);
.cpp
void Cxx::OnChangeEditXX()
{
OnChangeEditDigits(FALSE);
}
void Cxx::OnChangeEditXX(BOOL bCompati)
{
…
}
のようにしたら動いた
が、これで終わりではなかった。このあと次々に
・なぜかRelease版だけ/0で落ちる→除数にコンストラクタで1を入れておいた(どうせ一時的だし)
・なぜかRelease版でAfxGetMainWnd()がCMainFrameではなくて途中でnewしたダイアログを示す→ダイアログをnewする場所を移動させた
ここまでやるとさすがに動いたw
0 件のコメント:
コメントを投稿