带有ISDispatch接口的.NET COM组件在安装了.NET Framework 4.5.1的IE10 JavaScript中无法工作
我为这么长的标题道歉,但我需要填写所有相关主题,以便更好地澄清我的帖子 问题是,正如标题所说,我有一个正在运行的应用程序,它使用一个.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注册的类:带有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
[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组件最终一切正常。。。