4

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

没什么大不了的,只是好奇他们是否将这些考虑因素抽象出来,或者更好,但架构有很大的不同,这些问题甚至不适用。

提前致谢

也许一个更好的问这个问题的方法是它是否仍然是托管/垃圾收集内存模型中的 .NET 对象的架构,在非托管(但沙盒)引用计数内存架构中引用 COM(WinRT)对象?

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

4

3 回答 3

1

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

在某些区域 COM 会泄漏。

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

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

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

于 2012-02-22T20:08:20.070 回答
0

[罗伯特·斯威尼回答的补充]

根据 .NET 框架的官方博客文章

.NET API 不是通过 WinRT 公开的,而是继续像往常一样工作,由 CLR 公开。

此外,它说:

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

于 2012-11-27T04:15:00.680 回答
-1

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

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

于 2011-10-04T22:59:27.450 回答