37

我日常工作的一部分是维护和扩展遗留的 VB6 应用程序。通用引擎是用 C/C++ 编写的,VB6 使用这些函数来提高性能。

对于异步编程,C 接口是不够的,我们依靠 COM 控件向 VB6 触发事件。

我的问题是,当我在 VB6 中注册控件时,VB 会将此控件加载到内存中,并且在我退出 VB6 IDE 之前不会将其卸载。由于控件一直加载,我无法在 VC6 中重新编译它,因为 DLL 文件被锁定。

我发现的一个解决方案不是在 VB 中启用控件,而是使用CreateObject()我的控件的全名。那么问题是我必须将我的控件声明为一个对象,因为 VB6 对我正在使用的接口一无所知,而且我无法访问 IntelliSense,这很痛苦。

知道如何告诉 VB6 在退出应用程序后或直接在 IDE 中卸载控件吗?

4

1 回答 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
于 2008-08-20T03:58:09.347 回答