3

次のリンクで参照されているグローバル VB6 エラー ハンドラー製品は、「小さなコールバック フックを VBE6 デバッガーにインストールする」と主張しています。

http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm

私はこの製品を自分で実装したいと考えています。なぜなら、それが何をしているかをもっと制御したいからです。上記の製品は、その機能をどのように達成する可能性がありますか?

4

1 に答える 1

1

あなたが見ている製品はCOMコンポーネントです。Webサイトで入手できるドキュメントから、COMコンポーネントは特定のコンポーネントクラスを実装しているように見えます。すでに製品をお持ちの場合、最初に行うことは、SysInternalsを起動し、DLLでprocmon実行regsvr32し、作成されたレジストリエントリからどのコンポーネントクラスが実装されているかを把握することです。これを知ったら、MSDNはどのインターフェイスがそれらのコンポーネントクラスに対応するかを教えてくれるかもしれません。

Microsoftは、スクリプトエンジンをホストし、デバッグ機能を挿入できるActiveScriptingと呼ばれるフレームワークを開発しました。VB6がそのフレームワークに結びつくexeを生成すると仮定すると、次のことができる可能性があります。

  • を実装するCOMコンポーネントを作成するIApplicationDebugger
  • IApplicationDebugger::onHandleBreakPointVBコードのエラーに対応できるように実装する
  • からVBにコールバックする方法については、MSDNKBQ222966をお読みください。onHandleBreakPoint

ErrEx製品がを使用してクラスを注入しているようIActiveScript::AddNamedItemです。同じ動作を提供するには、同じCOMコンポーネントに実装して、と同じインターフェイスを実装するCOMコンポーネントIActiveScriptSite::GetItemInfoのインスタンス(およびそれに関連付けられた)へのポインターを返します。の実装では、次のことを行います。TypeInfoErrExErrEx.EnableGlobalErrorHandler

  • CoCreateInstanceinproc Process Debug Manager
  • キャスト参照IRemoteDebugApplication
  • IApplicationDebuggerを使用してコンポーネントのインスタンスを登録しますIRemoteDebugApplication::ConnectDebugger

IActiveScript::AddNamedItem実行中のプロセスからポインタを取得する方法がわからないため、呼び出しを詳しく説明しIActiveScriptました。また、Process Debug Managerの新しいインスタンスの作成が機能するかどうか、または何らかの方法で既存のインスタンスにフックする必要があるかどうかもわかりません。

説明がわかりにくく、情報が不足していて、プロセスの大部分が説明されていないことをお詫びしますが、これは元に戻ります...

MSDNのActiveScriptingAPIの記事を読むことをお勧めします。

于 2012-05-03T09:07:55.787 に答える