「Windows 8」OS とブラウザ「Microsoft Internet-Explorer 10」で Active-X コントロールを実行すると、非常に奇妙な動作が発生します。
コントロール: 私の Active-X コントロールは非常に安定した製品であり、私の会社はすでに何百人もの満足している顧客に数年間配布しています。このコントロールは、C++ で記述され、「Visual Studio 2008」でビルドされた ATL カスタム描画コントロールです。
問題 – 描画が消える: 初めてコントロールを開くリンクを押すと、コントロールが徐々に描画されていることがわかります (データの読み込みが遅い場合があるため) が、最終的にすべての描画が消えて、コントロールが配置されている空白の白い背景色。
「Spy++」を使用すると、コントロールが実際に存在することがわかりますが、その描画はすべて消えてしまいます。ブラウザーを移動したりサイズを変更したりすると、コントロールは再描画されますが、それ以外の場合は単に表示されません。
この問題をデバッグして、誰が私の図面を消去しているのかを突き止めようとしました。次のテクニックを思いつきました。
- WinDBG を使用して、次のメソッドの 'user32.dll' DLL にブレークポイントを追加しました: user32!InvalidateRect、user32!InvalidateRgn、user32!FillRect、
- スタックのみを表示し、実行を継続するようにこれらのメソッドを定義しました。
- 上記の問題のあるシナリオを実行しましたが、
- 問題が発生したとき、誰が「Invalidate」または「FillRect」を呼び出したかを確認しようとしていますが、
- これはすべて非常に迅速に行われるため、「Print Screen」ボタンを使用してその瞬間をフリーズしています
これを数回行った後、コントロールが消えるちょうどその時に、次のスタック呼び出し 'user32!FillRect' が見つかりました。
user32!FillRect
MSHTML!memcpy+0x9805
MSHTML!COmWindowProxy::SwitchMarkup+0x468
MSHTML!CMarkup::SetInteractiveInternal+0x428
MSHTML!CMarkup::RequestReadystateInteractive+0x98
MSHTML!CMarkup::BlockScriptExecutionHelper+0xde
MSHTML!CHtmPost::Exec+0x794
MSHTML!CHtmPost::Run+0x1c
MSHTML!PostManExecute+0x5f
MSHTML!PostManResume+0x7b
MSHTML!CHtmPost::OnDwnChanCallback+0x3a
MSHTML!CDwnChan::OnMethodCall+0x19
MSHTML!GlobalWndOnMethodCall+0x169
MSHTML!GlobalWndProc+0xd7
user32!InternalCallWinProc+0x23
user32!UserCallWinProcCheckWow+0x100
user32!DispatchMessageWorker+0x3ef
user32!DispatchMessageW+0x10
IEFRAME!CTabWindow::_TabWindowThreadProc+0x981
IEFRAME!LCIETab_ThreadProc+0x378
iertutil!CIsoWinMsg::PostQueuedMessagesToComponent+0x4b
IEShims!NS_CreateThread::DesktopIE_ThreadProc+0x66
KERNEL32!BaseThreadInitThunk+0xe
ntdll!__RtlUserThreadStart+0x72
ntdll!_RtlUserThreadStart+0x1b
これは一貫しています。このスタックを調べると、このメッセージは class の window に属していることがわかりましたInternet Explorer_Hidden
。これは、 size の window ですzero (0x0)
が、WS_VISIBLE
スタイルがあります。このウィンドウはブラウザに属します。
この現象を知っている人はいますか?ブラウザの非表示ウィンドウがこの問題を引き起こしている可能性はありますか? 私の図面を消去しているスタックを試してみるために、他のアプローチをお勧めできますか?
ヒントをありがとう!
パスオファー