2013-07-09 51 views
2

我在“Windows 8”操作系统和浏览器“Microsoft Internet-Explorer 10”上运行Active-X控件时遇到了非常奇怪的行为。Windows-8和Internet Explorer-10打破了我的ActiveX控件绘图?

控件: 我的Active-X控件是非常稳定的产品,我公司已经在数百个快乐客户之间分发了好几年了。该控件是用C++编写的ATL自定义绘图控件,并使用“Visual Studio 2008”构建。

问题 - 绘图消失: 虽然我按下第一次打开控件的链接,但我可以看到我的控件逐渐被绘制(因为我的数据加载有时很慢),但最终所有图形消失,在控件所在的位置留下空白的白色背景颜色。

使用'Spy ++'我可以看到我的控制真的存在,但是它的所有绘画都消失了。 如果我移动浏览器或更改其大小,控件将被重新绘制,但除此之外它根本不可见。

我试图调试这个问题,并找出谁在擦除我的图纸。 我想出了以下技术:

  1. 使用的WinDBG我加断点在以下方法 'user32.dll中' DLL:!!!InvalidateRect USER32,USER32 InvalidateRgn,USER32 FillRect,
  2. 我定义了这些方法只显示栈,并继续运行,
  3. 我跑了上述问题的情况下,
  4. 当问题发生,我想查看谁被称为“的Invalidate”或“FillRect”,
  5. 由于这一切发生很快,我正在使用'Print Scr EEN”按钮可冻结时刻

正好在我的控制消失下面的堆栈呼叫的时间做这几次我发现后‘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 

这是一致的。 检查此堆栈时,我发现此消息属于类Internet Explorer_Hidden的窗口,该窗口的大小为zero (0x0),但窗口的样式为WS_VISIBLE。该窗口属于浏览器。

有没有人知道这种现象? 浏览器隐藏窗口是否有可能导致此问题? 你可以推荐其他方法来尝试和寻找删除我的绘图的堆栈吗?

非常感谢您的任何提示!

拉巴斯发售

+0

这是GDI手柄泄漏的常见迹象,这是一个长期未被发现的bug。 –

+0

我不确定泄漏GDI句柄是否与此问题有关,因为(a)当我第一次启动浏览器并打开我的AXCtrl时,问题发生,并且(b)此阶段的GDI对象总数是整个IE过程大约70个,听起来不太好(除非我错过了一些东西)。 – PazO

+0

好吧,以此为标志,我们没有好的方法来为您调试代码。如果您无法自己调试,请使用Microsoft支持。 –

回答

0

结论: 该缺陷是Microsoft Internet Explorer 10

我用微软支持服务来进一步调查这一问题。这里附上的调查结果如下:

Microsoft支持部门查看了我的IE版本(Internet Explorer),并建议先将IE升级到其最新的补丁。

碰巧,我工作的机器没有设置为由Windows Update服务自动更新一段时间。作为升级IE的一部分,我不得不首先使用Windows Update服务更新窗口到其最新的补丁。

Windows Update的过程中,Microsoft Internet Explorer 10被自动更新为最新的补丁。 IE更新后,问题消失。 另外,ActiveX GUI加载过程变得更快。

老版Microsoft Internet Explorer 10,这引起了问题:

  • 版本:10.0.9200.16384
  • 更新版本:RTM(KB2718695)

新的Microsoft Internet Explorer 10版本,解决了问题:

  • 版本:10.0.9200.16635
  • 更新版本:10.0.7(KB2846071)

现在一切都按预期工作。

谢谢Pazo