调用 IDispatch::Invoke 时 IE9 RC 崩溃

发布于 2024-10-17 10:10:46 字数 422 浏览 6 评论 0原文

我有一个适用于 IE6、7、8 和 IE6 的工作代码。 9 Beta 但在 IE9 RC 上崩溃。 我可以看到网页成功使用了 ActiveX 的接口,但是当我尝试从 ActiveX 调用 IDispatch::Invoke 时,ActiveX 崩溃了。

我的应用程序是由 CHtmlView(IE 容器)、网页(GUI)和 ActiveX(应用程序本身)构建的,我看到网页成功使用了 ActiveX 的界面,但是当我尝试将数据发送回网页时,我崩溃了。

调试代码(vs2005 c++)后,我发现所有 IDispatch 函数都会导致崩溃,但这种行为只能在 RC 版本中重现,我们的产品已经运行了大约 3 年,没有出现问题,现在每个升级到 RC 的客户端无法再使用我们的产品。

是否有任何变化可能导致这种行为?根据在线文档我找不到任何东西。 谢谢。

I have a working code that is working on IE6,7,8 & 9 Beta but crashes on IE9 RC.
I can see that the web page is using the ActiveX's interface successfully but when I try to call IDispatch::Invoke from the ActiveX , the ActiveX crashes.

My application is constructed from a CHtmlView (IE container) a web page (GUI) and an ActiveX (the application itself), I see that the webpage uses the ActiveX's interface successfully but when I try sending data back to the webpage I crash.

After debugging the code (vs2005 c++) I found that all IDispatch functions cause a crash, but this behavior only reproduce with the RC version, our product is already running for a bout 3 years without a problem and now every client that upgrades to the RC cannot use our product anymore.

Were there any changes that can cause such a behavior? according to the documentations on-line I couldn't find anything.
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扛起拖把扫天下 2024-10-24 10:10:46

IE9RC 引入了 ActiveX 过滤:

Internet Explorer 9 RC 允许您阻止所有 ActiveX 控件
站点,然后仅对您信任的站点重新打开它们
新的 ActiveX 过滤选项。

IE9RC introduced ActiveX Filtering:

Internet Explorer 9 RC allows you to block ActiveX controls for all
sites, and then turn them back on for only the sites that you trust with
the new ActiveX Filtering option.

此岸叶落 2024-10-24 10:10:46

经过一番艰苦的努力,我找到了答案(两年前)。
当时我关闭了IE9论坛上的问题,但我忘了关闭这个帖子。

谢谢@Paul Sweatte 提醒我。

我们的框架的工作原理如下:

  1. activex 和网络有一组已知的字符串,例如:“onStart”、“onPause”等...
  2. 网络将在引擎中注册该函数。
  3. activex会在需要时调用回调

第二部分是问题,显然在旧的IE版本中,javascript eval函数会创建IDispatch对象,并且您可以将对象传递给activex。

在 IE9 中,除了许多其他更改之外,这一点也发生了变化,并且 eval 会返回其他内容。

当 activex 尝试执行回调时,就会发生挤压。
调试起来非常困难。

After tiresome struggle I found the answer (2 years ago).
Back then I closed the questions on the IE9 forum but I forgot to close this thread.

Thank you @Paul Sweatte for reminding me.

Our framework worked as followed:

  1. The activex and the web had a set of known strings such as: "onStart" , "onPause" etc...
  2. The web would register the function in the engine.
  3. The activex would call the callback when needed

The second part was the problem, apparently in old IE versions, the javascript eval function would create IDispatch objects, and you could pass the objects to the activex.

In IE9 along with many other changes this changed too, and eval would return something else.

The crush would happen when the activex tried to execute the callback.
It was ... VERY hard to debug.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文