activex控件在win10 x64 ie11中运行不正常

weixin_38048154 2017-12-28 03:03:44
请教一下,我们开发的ActiveX(用COleControl)在win7 32位ie下运行正常,但是在win10 x64 ie下运行有问题,控件能够初始化成功,但功能不正常,调试控件无法进入断点,并且在输出中提示:
“iexplore.exe”: 已加载“C:\Windows\System32\ELSCore.dll”,Cannot find or open the PDB file
“iexplore.exe”: 已加载“C:\Windows\System32\elsTrans.dll”,Cannot find or open the PDB file
“iexplore.exe”: 已卸载“C:\Windows\System32\elsTrans.dll”
“iexplore.exe”: 已加载“C:\Windows\System32\elslad.dll”,Cannot find or open the PDB file
“iexplore.exe”: 已加载“C:\Windows\System32\BCP47Langs.dll”,Cannot find or open the PDB file
internal\onecorecom\inc\combase\comcataloghelpers.hpp(64)\ole32.dll!00007FFD8BF889C1: (caller: 00007FFD8C01E7B9) ReturnHr(2) tid(28ec) 80040154 没有注册类
线程 'Win64 线程' (0x1c64) 已退出,返回值为 0 (0x0)。
线程 'Win64 线程' (0x2b0c) 已退出,返回值为 0 (0x0)。
线程 'Win64 线程' (0x2f7c) 已退出,返回值为 0 (0x0)。
线程 'Win64 线程' (0x21c4) 已退出,返回值为 0 (0x0)。
“iexplore.exe”: 已加载“C:\Windows\System32\slc.dll”,Cannot find or open the PDB file
“iexplore.exe”: 已加载“C:\Windows\System32\sppc.dll”,Cannot find or open the PDB file
“iexplore.exe”: 已卸载“C:\Windows\System32\sppc.dll”
“iexplore.exe”: 已卸载“C:\Windows\System32\slc.dll”
线程 'Win64 线程' (0x32f8) 已退出,返回值为 0 (0x0)。
onecoreuap\shell\windows.storage\shelllnk.cpp(124)\windows.storage.dll!00007FFD894D0C2A: (caller: 00007FFD894D0B02) ReturnHr(10) tid(33bc) 80004002 不支持此接口
onecoreuap\shell\windows.storage\shelllnk.cpp(124)\windows.storage.dll!00007FFD894D0C2A: (caller: 00007FFD894D0B02) ReturnHr(11) tid(33bc) 80004002 不支持此接口
onecoreuap\shell\windows.storage\shelllnk.cpp(124)\windows.storage.dll!00007FFD894D0C2A: (caller: 00007FFD894D0B02) ReturnHr(12) tid(33bc) 80004002 不支持此接口
...全文
30 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38089806 2018-05-12
  • 打赏
  • 举报
回复
64位Activex只能运行在64位的IE标签页进程中。32位Activex只能运行在32位的IE标签页进程中。
32位操作系统上,或者64位操作系统上关闭了EPM的区域中,IE的标签页进程都是32位。
64位操作系统对于Internet和受限站点区域默认启用EPM,这意味着ActiveX需要有64位版本并且注册CATID_AppContainerCompatible才可以运行。受信任站点默认是关闭EPM的,这意味着你也需要提供一个32位版本的ActiveX以避免用户把你的网站加入受信任站点区域之后ActiveX反而不能工作。
TabProcGrowth设置为0之后,IE并不为标签页创建单独的进程,而是重用框架进程。在64位系统上框架进程也是64位,这意味着32位的ActiveX不能被加载。但是默认设置下Internet区域的EPM是打开的,你改不改TabProcGrowth都得提供64位的ActiveX版本。
Visual C++ MVP
weixin_38079247 2018-05-11
  • 打赏
  • 举报
回复

感谢您的回复!64位Activex只能运行在x64操作系统的x64IE上?而且IE必须开启EPM,同时需要注册CATID_AppContainerCompatible.是这样吗?我看网上还有说需要设置注册表TabProcGrowth为0,是必须的吗?期待您的回复 。
weixin_38064085 2018-01-10
  • 打赏
  • 举报
回复
64位进程不能加载32位的控件。如果你的控件在64位IE进程中初始化成功,那么你的控件已经是64位版本。这也意味着Enable 64-bit process for Enhanced Protected Mode和Enable Enhanced Protected Mode这两个选项都是启用状态。

EPM打开之后,IE标签页运行在appcontainer完整级别下,能够访问的资源极其有限。你的ActiveX需要注册CATID_AppContainerCompatible分类并且在需要的资源(例如另一个COM组件所在的DLL)访问不到的时候做对应处理。参考Supporting enhanced protected mode (EPM)。
Visual C++ MVP
weixin_38057194 2017-12-28
  • 打赏
  • 举报
回复
非常感谢您的解答!我开发的是32位控件,刚才我把属性--调试-工作目录    设置为控件所在目录(之前设置错了),控件运行时不再提示“没有此接口”等错误,但是还是无法进入调试断点。另外,就您说的用SysWOW64目录的32位IE,我查询网上说win10 64位操作系统统一了32位和64位IE,不再区分32位版本,不知道我说的对不对?

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧