dllのデバッグ – プログラミング – Home

通知
すべてクリア

[解決済] dllのデバッグ


さる
 さる
(@さる)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

こんばんは。

システムにマウスフックをかけてメッセージを捕まえるアプリを作っています。
dllにてシステム全体のマウスメッセージを捕まえて、それをexeへ送るところまでは何とかできるようになりましたが、このdllを作っている間ずっと困ったことがあり、それつにいて質問させて下さい。

たとえば、以下のコードの <- の部分にブレークポイントを貼ったとき、
自アプリ内で、クリックしたときには止まってくれるのですが、ほかのアプリのウィンドウ内でクリックしたときは止まってくれません。

止まらないだけで、メッセージ自体は捕まえていて、そのあとexeには、WM_MDOWNメッセージが送られています。

この為に、デバッグにとても苦労します。
なぜこのようになるのかご存じの方いらっしゃいましたらご指導下さいませ。
よろしくお願いします。

EXPORT LRESULT CALLBACK MouseHookProc( int nCode, WPARAM wp, LPARAM lp){

if ( nCode < 0)
return CallNextHookEx( hMouseHook, nCode, wp, lp);

switch( wp){
case WM_MBUTTONDOWN:
PostMessage( hWndApp, WM_MDOWN, wp, lp); <- ここ
return TRUE;
}

return CallNextHookEx( hMouseHook, nCode, wp, lp);
}

dll内にブレークポイントを貼ったとき、


引用未解決
トピックタグ
さる
 さる
(@さる)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

書き忘れました。
環境は Windows2000 + sp3 / VC++6 + sp5 / SDK
です。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>なぜこのようになるのかご存じの方いらっしゃいましたらご指導下さいませ。

ウィンドウで発生したイベントを捕らえる時、フック .dll はそのウィンドウを所有す
るプロセス空間に一時的に押し込まれ、そのプロセスのコンテキストでフックプロシー
ジャが実行されるからです。


返信引用
さる
 さる
(@さる)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

渋木宏明(ひどり)さんありがとうございます。

よそで起きたイベントはこちらからは制御できないということですか。
このようなときはふつうどのようにしてデバッグをするのでしょうか。
引き続きおねがいします。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> このようなときはふつうどのようにしてデバッグをするのでしょうか。

・MessageBoxやファイルに変数の値を出力して
 うまくいっているか確認する。
・VCをもう1つ立ち上げて、別のプロセスにデバッガをアタッチする。
[ビルド]-[デバッグの開始]-[プロセスへアタッチ]

など。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>よそで起きたイベントはこちらからは制御できないということですか。

制御ではなく、よそ(他プロセス)で起きたイベントは、こちらに通知されないという
ことです。

デバッグ方法については、すでにコメントについているように、ログファイルなどに実
行結果を記録していけばよいと思います。


返信引用
さる
 さる
(@さる)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

渋木宏明(ひどり) さん、dairygoods さんありがとうございます。

実はこれまではMessageBoxを使っていたのですが、どうしてもつかみきれない部分があり、
質問させていただきました。
MesageBoxだと、いちいち閉じるのが面倒だったのでファイルに記録して追いかけてみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました