WinRT .NET 4.5 and RCW

本文关键字:and RCW NET WinRT | 更新日期: 2023-09-27 18:10:22

只是好奇是否有人有足够的时间使用WinRT来理解WinRT和。net 4.5中是否有一些地方消除了。net程序员在VSTO和COM互操作办公室编程中遇到的一些关于rcw的旧项目,以及COM引用计数和。net GC的区别,除了不使用终结器(确保你得到所有。net rcw的引用,等等)。

没什么大不了的,只是好奇他们是否抽象了那些考虑,或者更好的是,架构是实质性的不同,这些关注甚至不适用。

Thanks in advance

也许问这个问题的一个更好的方式是,它是否仍然是在一个托管/垃圾收集的内存模型引用COM (WinRT)对象在一个非托管(尚沙盒)引用计数内存架构的。net对象的本质上相同的架构?

除非在元数据绑定或沙盒环境中有一些"魔法",否则我们只需要应用与rcw相同的方法。

WinRT .NET 4.5 and RCW

我已经用c#/XAML在开发者预览版上构建了两个完整的应用程序。WinRT对象感觉就像普通的c#对象。不需要finalizer或其他传统的。net/com互操作。对。net的投影使得WinRT API非常无缝。

有一些COM漏过的地方。

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

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

现在也有一些冗余,在WinRT和。net中定义了类似的类型(IObservableVector和INotifyCollectionChanged)

[补充Robert Sweeney的回答]

根据。net框架的官方博客文章:

. net api没有通过WinRT公开,而是通过CLR公开,继续像往常一样工作。

还说:

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

COM互操作并不真正适用于WinRT,因为WinRT完全绕过了Win32架构(即它们并排存在)。由于COM位于Win32之上,因此它在WinRT上下文中是完全独立的交易。

编辑:对不起-我错了。完全误解了WinRT!