0

嗨,我正在处理一些遗留代码 - 用作“安装程序”的 ATL ActiveX 从服务器下载文件以供以后安装。有一个“进度条窗口”可以正常工作。问题是当我在同一进程(Windows XP IE7)中启动另一个 ActiveX 实例时,没有为第二个实例安装进度条。

::CreateWindowEx(0L, PROGRESS_CLASS, EMPTY_STRING, WS_CHILD | WS_VISIBLE, X, (2*Y)-m_nProgHeight, nWidth - 2*X, m_nProgHeight, m_hWnd, NULL, _Module.GetModuleInstance(), NULL);

所以我收到错误 1407 CLASS_NOT_REGISTERED。我在 DLLMain 中找到一些与注册相关的代码的唯一地方(这也是我关心的问题))对于附件案例:

WNDCLASS wc;
memset(&wc,0,sizeof(wc));
::GetClassInfo(hInstance, "#32770", &wc);
wc.lpszClassName = "XXXXXWindow";
RegisterClass(&wc);

谢谢

4

1 回答 1

0

好的,我发现的是: - IE 启动时会加载两个 comctl32.dll - 版本 5.xxx 和版本 6.xxxxx。在第一个 activeX 实例完成后如何运行(部署)我看到只有 comctl32.dll 的 6.xxxx 版本才被加载。添加 InitCommonControlsEx() 并没有帮助,因为第二次运行时 dll 已经被卸载,这实际上导致了 IE 崩溃。

当我明确添加 LoadLibrary(comctl32.dll) 时,它解决了这个问题。

如果有人知道什么可能导致版本 5.xxxx 的卸载,请在此处发表评论。

谢谢你。

于 2010-12-02T12:46:45.553 回答