VBでデバッガが落ちる

解決


飛山  2002-10-10 21:59:31  No: 105153

VBでデバッグ中にメイン画面を起動中にデバッガの終了ボタンを押すと、正常にデバッグを終了しますが、サブ画面を開いた状態でデバッガの終了ボタンを押すと、VisualStudio自身が落ちてしまいます。
サブ画面をキャンセルしてメイン画面だけに戻すと、正常にデバッグを終了します。


飛山  2002-10-10 22:18:10  No: 105154

システムメニューに項目を追加し、それを処理する為にSetWindowLongを使用したのですが、それを使うと落ちます。


たかみちえ  URL  2002-10-10 22:40:36  No: 105155

ええと、SetWindowLongについて書かれたサイトの使用上の注意とかに書いてありませんでした?
SetWindowLongでウィンドウプロシージャを変更するのをサブクラス化というんですけど、
サブクラス化は必ず解除してから終了しないと、VBは開発環境ごと強制終了してしまいます。

  デバッガの終了を押すと、サブクラス化を解除する処理を通らないので、作っているソフトが異常を起こし、結果VBも強制終了してしまいます。
  できるのならばサブクラス化を使わないようにするか、開発環境を変えることをおすすめします。
(わたしはこれで一番悩みました。なにかエラーが起こるたびにVB自体がとまり、結果自作のウィンドウプロシージャにメッセージがたまり強制終了する羽目になるので、とても気を使います(-_-;)
結果、わたしは開発環境をDelphiに変更しましたけど…)


飛山  2002-10-10 22:53:07  No: 105156

たかみちえ様、ありがとうございます。
おっしゃる通りです。ウィンドウのシステムメニューに項目を追加し、その項目が選択された場合の処理が必要でこのような処理を行いました。(頂き物の処理なのですが・・・)
後々、他の開発メンバーに引き継ぐ際に、VB語と落ちてしまうのを渡すわけにも行かないし、開発環境を変更することもできませんので、システムメニューでの追加を止めざるをえないのでしょうか・・・・(T_T)


たかみちえ  URL  2002-10-11 00:44:15  No: 105157

サブクラス化が必要になるような処理をするということで、それなりにできると思うのですけど、
だとしたら細心の注意を払って、取り扱うようにしてください。
問題さえ起こさなければ、サブクラス化は安全(?)です。
ウィンドウプロシージャを通す前に、別のプロシージャを通すこと自体はよくあることですから…。
ただ、多分VBが想定していない動作だと思うので、
デバッグ中にOSごと再起動くらいのことは、覚悟しておかないといけません。
(Windows98のときですけど、こうなることはうちでしょっちゅうあったので)

  ほかのメンバーには、くれぐれも気をつけてとでも付け加えて置いてください。
開発中はオフにして、いざコンパイルの直前にのみサブクラス化するようにするのも大事です。

  ほかの開発言語では、わざわざサブクラス化しなくてもそれくらいならできるので、
今後もそれくらいかそれ以上に高度なことをするつもりなら、今のうちに全員で変えていったほうがいいかもしれません…。

  AppBarやメニューのオーナードローをいくつか同時を使ってみると、現にサブクラス化では追いつかなくなるようです。
  そのソフトではいくつかの頂き物の処理を強引に連結して、さらに自分でいくらかの処理をしたので、ある程度仕方がない気がしますけど、
ソフトの動作自体不安定になり、使い物にならなくなります(^^ゞ


飛山  2002-10-11 18:16:18  No: 105158

たかみちえ様、ありがとうございました。
サブクラス化を使用して、どうしてもと言うわけではありませんが、開発ソフトのインターフェイス仕様、ユーザ様のご希望により、あえてシステムメニューが必要であったのですが、今後の開発スタイル、メンテナンス性も考慮して他の対応をすることになりました。(メニューエディタによるメニューの追加)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加