ここまでのテスト結果を。
そもそも「***_DestroyObjects()」はプログラム開発の一番初めに
存在していて、その時にこの現象は現れて無かった訳だから、
「***_DestroyObjects()」を残した状態でプログラムを削っていけば
必ずどこかで正常なデバッグ実行が出来る時が来る筈、という前提で
テストを進めて行ったのですが、
最終的にある一文をコメントアウトするかしないかで
現象が現れるかどうかという箇所に突き当たりました。
コード: 全て選択
'閉じるボタンの無効化
EnableMenuItem(GetSystemMenu(hTitleWnd, FALSE), SC_CLOSE, MF_GRAYED)
アプリのタイトルとなるウインドウの「閉じるボタン」を無効化
するという目的の物なのですが、これをコメントアウトすると、正常に通りました。
(つまり、同じ現象が「***_DestroyObjects()」と「EnableMenuItem」という
「二つの全く別の箇所の有る無し」で出現することになります。)
ただこれについてはそもそもABのBackSearchから持ってきたもので
それ自体の動作は確認しています。実際この箇所をそれが属する
タイトルウインドウ単体と共に別に抜き出して実行するときちんと
デバッグ実行出来ました。
そこで、ちょっとダメ元で同じ動作をする別の命令で書き換えたら
どうなるかと以下のように書いたら、
コード: 全て選択
'閉じるボタンの無効化
Dim mii As MENUITEMINFO
mii.cbSize=SizeOf(MENUITEMINFO)
mii.fMask=MIIM_STATE
mii.fState=MFS_GRAYED
SetMenuItemInfo(GetSystemMenu(hTitleWnd, FALSE),SC_CLOSE,MF_BYCOMMAND,mii)
こうすると(理由は分からないのですが)デバッグ実行は正常に戻りました。
もしかしてと思い、ここでこれを「EnableMenuItem」に戻し、
「***_DestroyObjects()」もそのままにし、
「上の二つとも間違いでは無い」という前提で別の所を
切っていって正常に戻る時があるかどうか試していったのですが
これが複数の箇所で見つかりました。
・メインウインドウのクリエイトで宣言されているサブスレッドの
CreateThread文をコメントアウトするかしないか。(コメントアウトで正常に)
・そのサブスレッド内、三つあるPeekMessage文を「三つ全て」コメントアウト
するかしないか。(三つともコメントアウトで初めて正常に戻る)
・メインウインドウのメニューから開くモーダルダイアログ内の
コードの「SetDlgItemText」をコメントアウトするかしないか。(コメントアウトで正常に)
恐らく探せば他にもあるのではないかと思います。
ただし見つけられた上記のものは、一見しただけではお互いに関連が無く、
総合して何かが見えてくるという感じがしないものばかりです。
特に「SetDlgItemText」については、これはあるサブの一番末尾に
コード: 全て選択
Sub ****()
…
…
SetDlgItemText
End Sub
という状態で書かれているのですが、アポストロフィーなどで
コメントアウトすると正常デバッグ実行出来るのに、
コード: 全て選択
Sub ****()
…
…
Exit Sub
SetDlgItemText
End Sub
と「Exit Sub」でスキップすると正常デバッグ実行に戻らないまま
です。
これらのことから思うに、「どうやらそれらの部分が"実行"されているかどうかは
問題ではないかもしれない」とも思えます。
つまり「実行時」に何か問題があるのではなくて「コンパイル時」に
何かが起きているんじゃないか、と。
特に「***_DestroyObjects()」はアプリが閉じられるときに初めて実行される
筈で、そこの影響でアプリがまず「表示もされない」というのはどうにも、、
という感じがします。(ただリリースコンパイルでは表示されます)
…とりあえず今はここまで、なのですが。
また何か分かりましたら。