CreateWindowEx завершается с ошибкой 1407 CLASS_NOT_Rurable для второго экземпляра ActiveX

Привет! Я работаю над устаревшим кодом - ATL ActiveX, используемый в качестве "установщика", загружает файлы с сервера для последующей установки. Есть "окно индикатора выполнения", которое отлично работает. Проблема в том, что когда я запускаю другой экземпляр ActiveX в том же процессе (Windows XP IE7), индикатор выполнения не устанавливается для второго экземпляра.

::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_Rurant. Единственное место, где я нахожу некоторый код, связанный с регистрацией, находится в DLLMain (это также моя забота)) В случае прикрепления:

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

Спасибо

1 ответ

Хорошо, я нашел следующее: - Когда IE запускается, он загружает два файла comctl32.dll - версию 5.xxx и версию 6.xxxxx. Как-то, как после того, как первый экземпляр activeX завершил свой запуск (развертывание), я вижу, что загружена только версия 6.xxxx файла comctl32.dll. Добавление InitCommonControlsEx() не помогло, так как для второго запуска dll уже был выгружен, что фактически вызвало сбой IE.

Когда я добавил явно LoadLibrary(comctl32.dll), это решило проблему.

Если кто-нибудь знает, что может вызвать выгрузку версии 5.xxxx, пожалуйста, прокомментируйте здесь.

Спасибо.

Другие вопросы по тегам