ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Visual Basic User's Clubコミュのプロセス間通信について

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

前のトピでハンドル値は、クラス名で取得することができました。


VB6に関する質問です。

VB2010⇔VB6でウインドプロシージャ―(WndProc)で受信をしてイベントを起こしているんですが
VB6のWndProcのイベントを起動時、他のボタンの処理の中身がステップ実行ができない、または、
ハングアップがかなりの確率で起こります。
ステップ事項した途端、MDIフォームが固まります。
最終行のアドレスHPで記載している通りです。

EXE実行では、各ボタンの機能が正常に動作します。MDFフォームも動作します。
VB2010の環境では、ウインドプロシージャ―(WndProc)が影響してステップ実行できなくなることは、
ありません。

これは、なぜこのようなことが起こるんでしょうか?
'デフォルトメッセージ処理をする
WndProc = CallWindowProc(OldWndProc, hwnd, msg, wParam, lParam)
この関数が影響を起こしているのだと思います。
また、どのように修正すればよいでしょうか



Public Function WndProc(ByVal hWnd As Long, _
ByVal msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long


  'PostMessage されると、ここに飛んでくる。

if msg = "適当な共有名" then

select case wParam

case pmSTART
'メッセージバッファをクリア(送信開始)
strMsg = ""
WndProc = 0
Exit Function

case pmDATA

'メッセージバッファに追加(送信)
strMsg = strMsg & chr(lParam)
WndProc = 0
Exit Function

case pmEND

'受信完了(送信終了)
'========================
'
' strMsg が 送られてきた
          ' メッセージなので
          ' 適宜解析するなりする
'
'========================
WndProc = 0
Exit Function

end select

end if

'デフォルトメッセージ処理をする
WndProc = CallWindowProc(OldWndProc, hwnd, msg, wParam, lParam)

End Function

プロセス間通信
http://njc.hatenadiary.com/entry/20120427/1335505401

理解不足で申し訳ありませんがどのようにすれば修正すればいいか
教えていただくとありがたいです。

コメント(2)

ずばりと解決出来ず、予想で恐縮なのですが。

下記リンクはCallWindowProcの解説です。
http://msdn.microsoft.com/ja-jp/library/cc410622.aspx

『指定されたウィンドウプロシージャに、メッセージ情報を渡します』とありました。
ステップイン実行をした場合はOldWndProcにメッセージ情報が渡されず『他のボタンの処理の中身がステップ実行ができない、または、ハングアップ』という結果になっている可能性があると思います。

仮にそうであれば、構造上の問題のため、修正も難しいと思います。
ステップイン実行による確認から、イミディエイトウィンドウやテキストファイルに必要情報を出力する方式に変えるくらいしか思いつきませんでした。
>>[1]
了解しました。別方法を考えます。
ご指摘ありがとうございます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Visual Basic User's Club 更新情報

Visual Basic User's Clubのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング