有没有办法强制VB6 IDE卸载库?

时间:2009-09-14 13:13:11

标签: dll vb6

在调试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调试会话的唯一方法。

2 个答案:

答案 0 :(得分:1)

我在当天多年来一直在努力解决这个问题,特别是在编写用于IIS站点的ActiveX DLL时。

我发现的唯一真正的解毒剂是将库加载到一个单独的VB6实例中(假设您拥有源的控制权)。这样您只需按工具栏上的“停止”按钮,就不会再加载库了。

答案 1 :(得分:0)

你应该看一些事情:

  1. 确保在应用程序退出时设置本地或全局变量=处理任何类引用。
  2. 调试时,切勿点击结束/停止调试按钮。这只是从代码下拉出地毯,有时可能会把东西留在内存中。
  3. 请勿在应用程序退出代码中使用End命令(请参阅第2点)。