无法在Windows运行时组件中实例化COM互操作接口

时间:2012-06-22 14:47:11

标签: windows-8 com-interop windows-runtime microsoft-metro .net-4.5

我正在使用C#编写的Windows运行时组件来包装一些不具备Windows运行时等效项的COM接口,而this MSDN example使用mbnapi提供的互操作接口。 TLB。当我尝试在包装类的构造函数中实例化我的IMbnInterfaceManager成员时,如下所示:

m_InterfaceManager = (IMbnInterfaceManager)new MbnInterfaceManager();

由于E_NOINTERFACE而抛出System.InvalidCastException(不支持此类接口)。

但是,如果我将我的包装器构建为类库而不是WinMD组件,它可以正常工作,没有其他更改。

我更倾向于将其构建为Windows运行时组件,以免限制库的有用性。 (至少有一个项目是用Javascript / HTML编写的。)我做错了什么,或者是我试图做不到的事情?

编辑:原来它是.NET 4.5 RC中的一个错误。留下这个问题以防其他任何人遇到这个问题,如果找到一个,我会发布一个解决方法。据说它将由RTM修复。

1 个答案:

答案 0 :(得分:0)

这已被确认为.NET 4.5 RC中的一个错误,据称将由RTM修复。当前的解决方法是编辑.csproj文件并将EmbedInteropTypes设置为False以引用tlb / dll。这可能导致App Store认证测试失败,因此确保在修复.NET错误后将其重新设置为True。