當調試一個VB6應用程序時,我注意到如果被調試的應用程序使用了VB6 IDE,那麼VB6 IDE將加載任何庫。庫在調試會話之間保持加載。這干擾了我的調試,因爲不幸的是,我們的一個庫(用delphi編寫)在全局變量中保持狀態,並且具有重要的初始化/終止邏輯。有沒有辦法強制VB6 IDE卸載庫?
該問題的簡單示例:我有一個foo.dll
其中有一個計數器。我訪問該計數器,具有以下的VB6聲明:
Public Declare Function GetCounter Lib "foo.dll"() As Long
Public Declare Function IncrementCounter Lib "foo.dll"() As Long
在這種情況下的問題是,當我開始新的調試會話計數器不復位。我寧願不編寫應用程序或庫邏輯來考慮這種「回收庫狀態」方案。我希望能夠用乾淨的平板開始調試會話。
目前我強制通過重新啓動VB6 IDE卸載庫。有沒有更好的辦法?
編輯:我打了一下週圍與調用KERNEL32.DLL功能卸載從即時窗口/重裝libaries;這原來只是一個崩潰IDE或導致隨機行爲的好方法。我應該預料到,由於IDE無法知道它對圖書館的原始處理已經失效。
我已經接受了AngryHacker的答案,因爲我現在確信重新啓動vb6.exe是啓動VB6調試會話和完全清理板岩的唯一方法。
我知道你已經聲明你不想這樣做,但我認爲你可以這樣做:顯式地從DLL中暴露一個方法來初始化/重新初始化,並在Vb6客戶端啓動時調用它。你也可以編寫一個顯式的關閉方法,當客戶端終止時調用,並從Form_Unload或類似的方法調用它。 – MarkJ 2009-09-15 13:12:54