在VB6 IDE中使用时如何卸载COM控件

37

我每天工作的一部分是维护和扩展旧的VB6应用程序,其中一个常用引擎是用C/C++编写的,而VB6使用这些函数以提高性能。

在异步编程方面,仅有C接口是不够的,我们依靠COM控件向VB6触发事件。

我的问题是,当我在VB6中注册控件时,VB将这个控件加载到内存中并且只有在退出VB6 IDE后才卸载它。由于控件在整个时间内都被加载,我无法在VC6中重新编译它,因为DLL文件被锁定了。

我找到的一个解决方法是不在VB中启用控件,而是使用完整名称的CreateObject() 创建控件。然后问题就是,我必须将我的控件声明为对象,因为VB6不知道我正在使用的接口,并且我无法访问智能感知功能,这很麻烦。

你有任何想法如何告诉VB6在退出应用程序或直接在IDE中卸载控件吗?

1个回答

27

我相信没有好的方法能强制VB6卸载控件。

以下是我的做法...不要同时运行Visual C和Visual Basic,而是在VC下面运行VB6:

  1. 加载VC
  2. 打开包含您的COM对象的项目
  3. 编辑,更改等等
  4. 在VC中,将输出可执行文件设置为VB6.EXE,并使用适当的命令行参数来加载VB6工作区
  5. 现在只需按F5启动VB6 IDE并加载您的VB6项目
  6. 当您想再次更改COM代码时,请退出VB6.EXE,进行更改,然后再次按F5。只要保存工作区,VB6就会记住您打开的所有窗口和所有项目设置。

这种方法的优点:

  • 您可以在COM对象中设置断点,并使用完整源代码调试器进行调试
  • 您可以同时愉快地在C和VB中调试
  • 每当VB6正在运行时,它始终具有最新版本的COM DLL

1
那很聪明,我会尝试做到。现在我想知道是否可以将我的旧基于Cookie的帐户与新的基于OpenId的帐户合并,以便我可以将此答案标记为“答案”... - Vincent Robert
2
这也适用于除了VB之外的其他IDE。我已经成功地在Delphi/VB6中做到了这一点。 - Daniel Rikowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接