0

こんにちは、私はいくつかのレガシー コードに取り組んでいます。「インストーラー」として使用される ATL ActiveX は、後でインストールするためにサーバーからファイルをダウンロードします。正常に動作する「進行状況バー ウィンドウ」があります。問題は、同じプロセス (Windows XP IE7) で ActiveX の別のインスタンスを開始すると、2 番目のインスタンスの進行状況バーがインストールされないことです。

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

OK、私が見つけたものは次のとおりです。ActiveX の最初のインスタンスが実行 (展開) を完了した後、comctl32.dll のバージョン 6.xxxx のみがロードされたままになっていることがわかります。InitCommonControlsEx() を追加しても役に立ちませんでした。これは、2 回目の実行で dll が既にアンロードされていたため、実際に IE がクラッシュしたためです。

明示的に LoadLibrary(comctl32.dll) を追加すると、問題が解決しました。

バージョン 5.xxxx のアンロードの原因を知っている人は、ここにコメントしてください。

ありがとうございました。

于 2010-12-02T12:46:45.553 に答える