在 VB6 IDE 中工作时卸载 COM 控件

Posted

技术标签:

【中文标题】在 VB6 IDE 中工作时卸载 COM 控件【英文标题】:Unload a COM control when working in VB6 IDE 【发布时间】:2010-09-05 06:02:25 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

这就是我要做的...而不是并行运行 Visual C 和 Visual Basic,而是在 VC 下运行 VB6:

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

这种方法的优点:

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

【讨论】:

这很聪明,我会努力做到的。现在我想知道我的旧的基于 cookie 的帐户是否可以与我的新的基于 OpenId 的帐户合并,这样我就可以将此答案标记为答案... 这也适用于 VB 以外的其他 IDE。我已经用 Delphi/VB6 成功地做到了。

以上是关于在 VB6 IDE 中工作时卸载 COM 控件的主要内容,如果未能解决你的问题,请参考以下文章

在代理 testng 中工作时返回连接超时

当 URL 在浏览器中工作时,啥可能导致“连接 ETIMEDOUT”错误?

如何在 UI 线程中工作时更新进度条

在 MVC 结构中工作时,DAO 是不是与 Model 相同? [复制]

谷歌地理编码 api 在 Apache Cordova 中的 Ripple 系统中工作时无法在 Android 手机中工作

PhpStorm / WebStorm中的CoffeeScript JSDoc支持