2010-11-30 10 views
0

私はいくつかのレガシーコードで作業しています - 「インストーラ」として使用されるActiveXは、後でインストールするためにサーバーからファイルをダウンロードします。 正常に機能する「プログレスバーウィンドウ」があります。 問題は、同じプロセス(Windows XP IE7)でActiveXの別のインスタンスを起動し、2番目のインスタンスの進行状況バーがインストールされていない場合です。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

OKに感謝を、どのような私が見つけたことは次のとおりです。 - IEの起動時に、2つのcomctl32.dll - バージョン5.xxxとバージョン6.xxxxxが読み込まれます。 アクティブXの最初のインスタンスが終了した後(実行)、comctl32.dllのバージョン6.xxxxのみが残っています。 InitCommonControlsEx()を追加しても、2回目の実行でdllが既にアンロードされていたため、IEのクラッシュが実際に発生しました。

明示的にLoadLibrary(comctl32.dll)を追加したところ、問題は解決しました。

バージョン5.xxxxのアンロードを引き起こす原因が分かっている場合は、ここでコメントしてください。

ありがとうございます。

関連する問題