2010-11-30 7 views
0

안녕하세요 일부 기존 코드에서 작업하고 있습니다. "설치 관리자"로 사용되는 ActiveX는 나중에 설치하기 위해 서버에서 파일을 다운로드합니다. 잘 작동하는 "진행률 표시 줄 창"이 있습니다. 문제는 동일한 프로세스 (Windows XP IE7)에서 ActiveX의 다른 인스턴스를 시작할 때 진행률 표시 줄이 두 번째 인스턴스에 설치되지 않은 것입니다.CreateWindowEx가 1407 오류로 실패합니다.

::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); 

당신에게

답변

0

확인 감사를, 무엇을 내가 찾은 것은 : - IE가 시작될 때 두 개의 comctl32.dll - 버전 5.xxx 및 버전 6.xxxxx가로드됩니다. 어떤 방법으로 activeX의 첫 번째 인스턴스가 끝나고 comctl32.dll의 버전 6.xxxx 만로드 된 것을 볼 수 있습니다. InitCommonControlsEx()를 추가해도 도움이되지 않았습니다. 두 번째 실행에는 dll이 이미 언로드 되었기 때문에 실제로 IE의 충돌이 발생했습니다.

명시 적으로 LoadLibrary (comctl32.dll)를 추가하면 문제가 해결되었습니다.

버전 5.xxxx의 언로드를 유발할 수있는 사항을 알고 계시다면 여기에 의견을 남기십시오.

감사합니다.