CreateWindowEx завершается с ошибкой 1407 CLASS_NOT_Rurable для второго экземпляра ActiveX - PullRequest
0 голосов
/ 30 ноября 2010

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

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

Спасибо

1 Ответ

0 голосов
/ 02 декабря 2010

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

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

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

Спасибо.

...