在 PowerBuilder 应用程序中使用 Web 浏览器控件时选择标记中的项目时出错<select>



我在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。

哗啦!

最新更新