次のリンクで参照されているグローバル VB6 エラー ハンドラー製品は、「小さなコールバック フックを VBE6 デバッガーにインストールする」と主張しています。
http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm
私はこの製品を自分で実装したいと考えています。なぜなら、それが何をしているかをもっと制御したいからです。上記の製品は、その機能をどのように達成する可能性がありますか?
次のリンクで参照されているグローバル VB6 エラー ハンドラー製品は、「小さなコールバック フックを VBE6 デバッガーにインストールする」と主張しています。
http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm
私はこの製品を自分で実装したいと考えています。なぜなら、それが何をしているかをもっと制御したいからです。上記の製品は、その機能をどのように達成する可能性がありますか?
あなたが見ている製品はCOMコンポーネントです。Webサイトで入手できるドキュメントから、COMコンポーネントは特定のコンポーネントクラスを実装しているように見えます。すでに製品をお持ちの場合、最初に行うことは、SysInternalsを起動し、DLLでprocmon
実行regsvr32
し、作成されたレジストリエントリからどのコンポーネントクラスが実装されているかを把握することです。これを知ったら、MSDNはどのインターフェイスがそれらのコンポーネントクラスに対応するかを教えてくれるかもしれません。
Microsoftは、スクリプトエンジンをホストし、デバッグ機能を挿入できるActiveScriptingと呼ばれるフレームワークを開発しました。VB6がそのフレームワークに結びつくexeを生成すると仮定すると、次のことができる可能性があります。
IApplicationDebugger
IApplicationDebugger::onHandleBreakPoint
VBコードのエラーに対応できるように実装するonHandleBreakPoint
ErrEx
製品がを使用してクラスを注入しているようIActiveScript::AddNamedItem
です。同じ動作を提供するには、同じCOMコンポーネントに実装して、と同じインターフェイスを実装するCOMコンポーネントIActiveScriptSite::GetItemInfo
のインスタンス(およびそれに関連付けられた)へのポインターを返します。の実装では、次のことを行います。TypeInfo
ErrEx
ErrEx.EnableGlobalErrorHandler
CoCreateInstance
inproc Process Debug ManagerIRemoteDebugApplication
IApplicationDebugger
を使用してコンポーネントのインスタンスを登録しますIRemoteDebugApplication::ConnectDebugger
IActiveScript::AddNamedItem
実行中のプロセスからポインタを取得する方法がわからないため、呼び出しを詳しく説明しIActiveScript
ました。また、Process Debug Managerの新しいインスタンスの作成が機能するかどうか、または何らかの方法で既存のインスタンスにフックする必要があるかどうかもわかりません。
説明がわかりにくく、情報が不足していて、プロセスの大部分が説明されていないことをお詫びしますが、これは元に戻ります...
MSDNのActiveScriptingAPIの記事を読むことをお勧めします。