我在PowerBuilder 11.5应用程序内的窗口中使用WebBrowser控件。在IE7和IE8上一切正常,但是当您在标签中选择项目时,应用程序在Windows 9下的IE7中崩溃。
在IE7和IE8中,我将应用程序添加到注册表项FEATURE_USE_WINDOWEDSELECTCONTROL。在Windows 7下的IE9中,64位执行相同的操作,如果与我的应用程序对应的REG_DWORD值为1,则应用程序崩溃。如果值为 0,则应用程序不会崩溃,但无法使用鼠标选择项目。
分析错误和转储文件时,mshtml.dll 文件中发生错误,异常代码0xc0000005,包括:
mshtml!CDOMMouseEvent::PrepareEvent
有什么想法吗?
更新:我的应用程序是在Windows XP SP3中开发的32位应用程序。
更新2:异常代码0xC0000005(我认为这是内存访问违规。
更新 3:为了寻找错误的原因,我在 C# 中基于 .NET Web 浏览器控件开发了一个 ActiveX 控件,并且我已将 PB 应用程序的 Microsoft Web 浏览器替换为新的 Web 浏览器。它也崩溃并且仅在PB中崩溃,因为在WinForm应用程序(使用相同的WebBrowser)中,一切正常。
使用 windbg 分析转储文件:
FAULTING_IP:
mshtml!CDOMMouseEvent::PrepareEvent+39
62b40195 8b39 mov edi,dword ptr [ecx]
EXCEPTION_RECORD: 00185f70 -- (.exr 0x185f70)
ExceptionAddress: 62b40195 (mshtml!CDOMMouseEvent::PrepareEvent+0x00000039)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 00000000
Attempt to read from address 00000000
PROCESS_NAME: PB115.EXE
ERROR_CODE: (NTSTATUS) 0xc0000005 - La instrucci n en "0x%08lx" hace referencia a la memoria en "0x%08lx". La memoria no se puede "%s".
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - La instrucci n en "0x%08lx" hace referencia a la memoria en "0x%08lx". La memoria no se puede "%s".
EXCEPTION_CODE_STR: c0000005
EXCEPTION_PARAMETER1: 00000000
EXCEPTION_PARAMETER2: 00000000
READ_ADDRESS: 00000000
FOLLOWUP_IP:
mshtml!CDOMMouseEvent::PrepareEvent+39
62b40195 8b39 mov edi,dword ptr [ecx]
WATSON_BKT_PROCVER: 11.5.0.2506
WATSON_BKT_PROCSTAMP: 489933bc
WATSON_BKT_MODULE: mshtml.dll
WATSON_BKT_MODVER: 9.0.8112.16446
WATSON_BKT_MODSTAMP: 4fb58407
WATSON_BKT_MODOFFSET: 230195
BUILD_VERSION_STRING: 6.1.7601.17514 (win7sp1_rtm.101119-1850)
PB11.5 和 Windows 7 64 位 + IE9 之间可能存在一些不兼容。
提前谢谢。
设置此注册表值似乎是 Internet Explorer 7 中错误的解决方法(MS 知识库文章,eHow 说明)。我的猜测是,由于根本原因在于Microsoft代码库,因此您唯一的选择是通过根据安装的IE版本切换注册表值来解决此问题。您可以使用此 CodeProject 文章来帮助您确定这一点。如果安装了 IE7 或 IE8,请将该值设置为 1,否则,将其设置为 0。
哗啦!