带有ISDispatch接口的.NET COM组件在安装了.NET Framework 4.5.1的IE10 JavaScript中无法工作

带有ISDispatch接口的.NET COM组件在安装了.NET Framework 4.5.1的IE10 JavaScript中无法工作,javascript,.net,internet-explorer,com,frameworks,Javascript,.net,Internet Explorer,Com,Frameworks,我为这么长的标题道歉,但我需要填写所有相关主题,以便更好地澄清我的帖子 问题是,正如标题所说,我有一个正在运行的应用程序,它使用一个.NET C COM组件,可通过JavaScript使用后期绑定从Internet Explorer访问。NET COM组件导出InterfaceIsDispatch,以便从组件向JavaScript世界抛出一些事件,以及从JavaScript访问组件的其他接口 该应用程序在以下环境中运行良好: 使用Visual Studio 2010和安装MSI编译和部署。 .N

我为这么长的标题道歉,但我需要填写所有相关主题,以便更好地澄清我的帖子

问题是,正如标题所说,我有一个正在运行的应用程序,它使用一个.NET C COM组件,可通过JavaScript使用后期绑定从Internet Explorer访问。NET COM组件导出InterfaceIsDispatch,以便从组件向JavaScript世界抛出一些事件,以及从JavaScript访问组件的其他接口

该应用程序在以下环境中运行良好:

使用Visual Studio 2010和安装MSI编译和部署。 .NET Framework 4.0。 Internet Explorer 10 当我的机器更新到.NET Framework 4.5.1时,问题出现了。通常从IsDispatch接口获取的事件已停止工作

在这里,我编写的代码没有什么特别之处,这是向COM公开.NET代码的正常方式

将要进行COM注册的类:

[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
[ProgId("NPlayer")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None),
 ComSourceInterfaces(typeof(IComEvents))]
public partial class NPlayer : UserControl, IExposedMembers, IObjectSafety
{
  [...]
}
发出通知的方式:

[Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IComEvents
{
  [...]

  [DispId(4)]
  void CloseEvent();

  [...]
}
发送CloseEvent事件的方式:

[...]

[ComVisible(false)]
public delegate void CloseEventHandler();

public event CloseEventHandler CloseEvent;

[...]

if (CloseEvent != null)
  CloseEvent();

[...]
从JavaScript接收COM事件的方式实际上JavaScript嵌入在GWT接口中,但我通常使用伪HTML代码简化测试:

<body>

[...]

<object id="NPlayer" name="NPlayer" classid="CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
            codebase="NPlayerDeployer.cab#version=5,1,5,0" width="0" height="0">/object>

[...]

<script for="NPlayer" event="CloseEvent()" language="javascript">
  alert("CloseEvent received!")
</script>

[...]

</body>
有人知道关于这个问题的一些信息吗?谷歌搜索解决方案并没有给我任何结果。我现在正在尝试将自己升级到支持.NET Framework 4.5和4.5.1的Visual Studio 2013,但结果更糟,Internet Explorer 10因新部署而崩溃我想这是另一篇文章

请提供一些帮助,我们将不胜感激

致以最良好的祝愿

多明戈。

我解决了我的问题,我想写在这里,因为我的分析是错误的,所以问题的标题与我真正的问题不符

我的疏忽是因为我使用的是.NET COM组件,而应用程序错误是在我将.NET Framework版本升级到4.5.1时再现的

我认为问题在于C代码,但真正的问题在于GWT JavaScript代码。在从.NET COM组件接收到事件后,我的代码调用一些其他JavaScript代码,以便将事件传播到接口端,在那里我发现JavaScript中的作用域使用不当,这在新版本的.NET Framework中出现了!好吧,这不是这篇文章的主题,所以我不会继续这个解释

总而言之,ISDispatch接口一切正常,除此之外,我的问题得到了解决

谢谢你的帮助


多明。

你应该发布一些代码,一个小但相关的片段。是的,你说得对,对此表示抱歉。我想我没有,因为我可能在等待一些明显的答案,比如是的,.NET COM组件不能与.NET Framework 4.5.1中的JavaScript一起工作;现在代码在我的帖子中。IComeEvents是否有[ComVisibletrue]?另外,我在Nlayer上没有看到[ComDefaultInterface],你有吗?嗯。。。不,你认为有必要吗?到目前为止,它一直是这样工作的。谢谢!!虽然我的.NET COM组件最终一切正常。。。