如何在不终止主应用程序的情况下卸载 ActiveX 的 ocx 以允许覆盖 ocx?
How to unload ActiveX's ocx without terminating main application to allow the ocx to be overwritten?
我有ActiveX
控件在VB6
中实现,并在MFC42
应用程序中实例化。
我在应用程序的左侧面板上有一个树视图结构,当选择树中的不同项目时,会在右侧面板上相应地加载不同的ActiveX
以显示所选项目的详细信息。
每当我想修改ActiveX
的VB
代码时,我都需要重新启动应用程序。这极大地中断了开发流程,因为应用程序启动速度非常慢。
在某些ActiveX
我们有虚拟代码/数据来允许在Internet Explorer中执行ActiveX
,加载速度更快,但并非所有ActiveX
都有。
我希望当我单击树视图中的不同项目时,将卸载以前的ActiveX
,并且我可以用新版本覆盖它。
如果 ActiveX 从未实例化/显示,我可以在应用程序仍在运行时替换ocx
。
我在网上搜索了两篇关于ActiveX
的文章,它们都建议正确的清理方法是:
m_pControl = new CWnd;
m_pControl->CreateControl(strControlProgid,
"",
WS_VISIBLE,
rc,
this,
5000,
NULL,
FALSE,
NULL);
// ...
m_pControl->DestroyWindow();
delete m_pControl;
我们已经使用此方法销毁了ActiveX
,但我仍然需要退出应用程序才能覆盖ocx
。
编辑:
或者,对于VC++ 6(使用MFC42),而不是Noseratio在他的答案中提到的CoFreeUnusedLibrariesEx
;我可以使用CoFreeUnusedLibraries
,它可以毫不拖延地适用于单线程公寓(STA)。
如果 COM 引用计数在应用中正常工作,则可以尝试使用 CoFreeUnusedLibrariesEx
强制卸载不再使用的 ActiveX DLL
相关文章:
- 使用ios:ate写入到流会覆盖现有文件
- 我可以重新分配/覆盖std::字符串吗
- 叮叮当当在修复时插入多个"覆盖"说明符
- 谷歌模拟和覆盖关键字
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 使用子类覆盖基类中定义的函数
- 当覆盖存在时调用基本虚拟"binded to object"函数
- C++指针在 for 循环中被覆盖
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么我的全局 new() 覆盖被绕过了?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- C++找出覆盖同一行的数组
- 专门化模板覆盖函数/避免对象切片
- 代码厨师问题伊什瓦拉(应许之地)
- 重写打印函数而不是覆盖基类
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 如何在 c++ 中覆盖相同的文本文件
- 覆盖应用程序的低级别键盘挂钩问题
- 如何在不终止主应用程序的情况下卸载 ActiveX 的 ocx 以允许覆盖 ocx?