在以下鏈接提到的全球VB6錯誤處理產品聲稱「安裝一個小回調勾入VBE6調試器」:如何實現全局VB6錯誤處理程序?
http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm
我想實現這個產品我自己,因爲我想了解更多控制它正在做什麼。上述產品如何實現它的功能?
在以下鏈接提到的全球VB6錯誤處理產品聲稱「安裝一個小回調勾入VBE6調試器」:如何實現全局VB6錯誤處理程序?
http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm
我想實現這個產品我自己,因爲我想了解更多控制它正在做什麼。上述產品如何實現它的功能?
您正在查看的產品是COM組件。從網站上的documentation可以看出,COM組件實現了特定的組件類。如果你已經擁有產品,首先要做的就是啓動SysInternals procmon
,在DLL上運行regsvr32
,然後根據創建的註冊表項實現哪些組件類。一旦你知道了這一點,MSDN可能會告訴你哪些接口對應於這些組件類。
Microsoft開發了一個名爲Active Scripting的框架,該框架允許您託管腳本引擎並注入調試功能。如果假設VB6產生關係到該框架中的exe文件,你可能能夠做到:
IApplicationDebugger
IApplicationDebugger::onHandleBreakPoint
能夠在響應錯誤COM組件VB代碼onHandleBreakPoint
它回顧了VB調用喜歡的產品注入了ErrEx
班使用IActiveScript::AddNamedItem
。爲了提供相同的行爲,在同一COM組件上執行IActiveScriptSite::GetItemInfo
,以返回一個指向實例(和關聯的TypeInfo
)的COM組件,該COM組件實現與ErrEx
相同的接口。在您的實現的ErrEx.EnableGlobalErrorHandler
你會做到以下幾點:
CoCreateInstance
INPROC進程調試管理器IRemoteDebugApplication
IRemoteDebugApplication::ConnectDebugger
註冊您IApplicationDebugger
組件的一個實例我掩飾了調用IActiveScript::AddNamedItem
,因爲我不知道如何從運行的進程中獲得指向IActiveScript
的指針。另外,我不知道創建Process Debug Manager的新實例是否可行,或者您是否需要掛鉤到現有實例中。
我對混亂的解釋道歉,缺少的信息,並粉飾過程的大部分地區,但是這是怎麼回事waaay回來......
你會想讀在MSDN的Active Scripting APIs文章。
我們可能能夠在標題中回答問題,但不能回答最後一句中的問題;它太寬泛了。 – 2012-04-20 05:41:53
聽起來有點嚇人。如果處理不正確,VB6中的掛鉤可能會導致IDE崩潰。如果您有一個或多個程序想要自己處理錯誤,會發生什麼情況?這仍然是可能的,或者這個鉤子無例外地竊取所有錯誤嗎? – Martin 2012-04-20 08:07:20
@Martin:這是一個VBA唯一的工具 – wqw 2012-04-20 12:27:03