代码之家  ›  专栏  ›  技术社区  ›  Wim Coenen

是否有方法强制VB6 IDE卸载库?

  •  2
  • Wim Coenen  · 技术社区  · 15 年前

    在调试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函数以从即时窗口卸载/重新加载libaries方面做了一些尝试;结果证明这只是一个使IDE崩溃或导致随机行为的好方法。我应该预料到,由于IDE无法知道它的库原始句柄已经失效。

    我已经接受了Angryhacker的回答,因为我现在确信重新启动vb6.exe是启动vb6调试会话的唯一方法,而且完全没有问题。

    2 回复  |  直到 15 年前
        1
  •  1
  •   AngryHacker    15 年前

    多年前,我一直在努力解决这个问题,尤其是在为与IIS站点一起使用的ActiveX DLL编码时。

    我找到的唯一真正的解毒剂是将库保存在单独的vb6实例中(假设您拥有对源的控制)。这样,只需按下工具栏上的停止按钮,库就不会再被加载。

        2
  •  0
  •   C-Pound Guru    15 年前

    你应该看看以下几点:

    1. 当应用程序退出时,通过设置本地或全局变量=Nothing,确保正在处理任何类引用。
    2. 调试时,切勿点击结束/停止调试按钮。这只是把代码下的地毯拉出来,有时会把事情留在记忆中。
    3. 不要在应用程序退出代码中使用END命令(请参见第2点)。