在调试VB6应用程序时,我注意到VB6 IDE会保留任何库,如果被调试的应用程序使用它们的话。库在调试会话之间保持加载状态。这会干扰我的调试,因为不幸的是,我们的一个库(用delphi编写)在全局变量中保持状态并具有重要的初始化/终止逻辑。
问题的简化示例:我有一个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函数从当前窗口卸载/重新加载库,我玩了一下;事实证明这只是崩溃IDE或导致随机行为的好方法。我应该预料到,因为IDE无法知道它的原始句柄已经变得无效。
我接受了AngryHacker的回答,因为我现在确信重新启动vb6.exe是启动VB6调试会话的唯一方法。
答案 0 :(得分:1)
我在当天多年来一直在努力解决这个问题,特别是在编写用于IIS站点的ActiveX DLL时。
我发现的唯一真正的解毒剂是将库加载到一个单独的VB6实例中(假设您拥有源的控制权)。这样您只需按工具栏上的“停止”按钮,就不会再加载库了。
答案 1 :(得分:0)
你应该看一些事情: