WinRT .NET 4.5和RCW

时间:2011-10-04 22:56:26

标签: c# windows-8 windows-runtime

只是好奇是否有人有足够的时间使用WinRT尚未了解WinRT和.NET 4.5中是否有区域消除了.NET程序员在VSTO和COM Interop Office编程中遇到的与RCW相关的一些旧项目COM引用计数和.NET GC的差异超出了不使用终结器(确保您获得对所有.NET RCW的引用等)。

如果他们抽象出那些考虑因素或更好,但架构存在重大差异并且这些问题甚至不适用,那么这并不是什么大不了的事。

提前致谢

提出这个问题的一个更好的方法是,在托管(垃圾箱)引用计数内存架构中引用COM(WinRT)对象的托管/垃圾收集内存模型中,它是否仍然与.NET对象的架构基本相同?

除非元数据绑定或沙盒环境中存在某些“魔力”,否则我们只需要应用与RCW相同的方法。

3 个答案:

答案 0 :(得分:1)

我在C#/ XAML的开发者预览版中构建了两个完整的应用程序。 WinRT对象就像普通的C#对象一样。无需终结器或其他传统的.NET / COM互操作程序。对.NET的预测使WinRT API非常无缝。

有些地方COM泄漏。

  • WinRT对象抛出的异常没有堆栈跟踪
  • WinRT对象抛出的大多数异常都有一个通用的异常类型,并包含一个HRESULT错误代码。

我预计这些问题将在未来的Windows 8版本中得到解决。

现在还有一些冗余,在WinRT和.NET中都定义了类似的类型(IObservableVectorINotifyCollectionChanged

答案 1 :(得分:0)

[Robert Sweeney's answer]的补充

根据.NET框架的官方blog post

  

.NET API不是通过WinRT公开的,而是继续按照CLR公开的方式继续工作。

进一步说:

  

.NET开发人员对互操作技术并不陌生。您可以使用COM Interop和P / invoke从.NET代码调用本机API。

答案 2 :(得分:-1)

COM互操作在WinRT中并不适用,因为WinRT完全绕过Win32架构(即它们并排存在)。由于COM位于Win32之上,因此在WinRT环境中完全独立。

编辑:对不起 - 我错了。完全误解了WinRT!请参阅下面的svick评论。