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

当谈到异步编程时,C 接口是不够的,我们依靠 COM 控件来向 VB6 触发事件。

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

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

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

有帮助吗?

解决方案

我很确定没有什么好方法来强制 VB6 卸载控件。

这就是我所做的...运行 VB6,而不是并行运行 Visual C 和 Visual Basic 在下面 风险投资:

  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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top