2011-10-04 63 views
4

只是好奇,如果任何人有足夠的時間用WinRT,但還不知道在WinRT和.NET 4.5中是否有一些區域會對.NET程序員帶來某些在VSTO和COM Interop中遇到的舊項關於RCW的Office編程以及COM引用計數和.NET GC之間的差異,而不是不使用終結器(確保您獲得了所有.NET RCW的引用等)。WinRT .NET 4.5和RCW

沒什麼大不了,只是好奇他們是否抽象出了這些考慮因素,或者更好的是架構是否有重大差異,這些擔憂甚至不適用。

在此先感謝

也許問這個問題的一個更好的辦法是,它是否仍然是重大的管理/垃圾回收的內存模型引用COM(WinRT的).NET對象相同的架構在一個非管理對象(但沙箱)引用計數內存架構?

除非元數據綁定或沙箱環境中存在一些「魔力」,否則我們只需要應用與RCW相同的方法。

+0

的一切,我聽到和看到至今仍指向的RCW,並照常營業。如果CLR 4.5有任何變化或計劃有任何變化,那麼這是一個保守祕密。 http://stackoverflow.com/questions/7457371/why-is-winrt-unmanaged/7457964#7457964在最近與Vance Morrison的採訪中沒有任何一個http://channel9.msdn.com/posts/NET-45-Vance- Morrison性能和內存使用改進 –

+0

我剛剛在單獨的帖子中發現了一條評論「雖然thunking層確實使用了RCW,但是Windows運行時的RCW比舊的P/Invoke RCW更輕量級 - Larry Osterman Sep 15時14分02秒「。 CLR中的元數據映射對於之前的COM Interop來說是一個很大的幫助(thx用於發佈Paul)。我需要強調的是,確保每個RCW都有明確引用的一些舊實踐(VSTO等)是否仍在使用中,因此您最終沒有引用COM對象的RCW,並且您可以不會讓他們中的任何一個失去記憶。 –

回答

-1

COM互操作在WinRT中並不真正適用,因爲WinRT完全繞過了Win32架構(即它們並排存在)。由於COM位於Win32之上,它在WinRT環境中是完全獨立的交易。

編輯:對不起 - 我錯了。完全誤解了WinRT!請參閱下面的svick評論。

+5

不是真的,WinRT類型基本上只是實現['IInspectable'接口](http://msdn.microsoft.com/en-us/library/br205821%28v=vs.85%29.aspx)的COM類型。 – svick

+0

據我瞭解,WinRT實際上是用Win32實現的,而WinRT類型只是用元數據COM。 – Gabe

+0

@svick - 絕對正確,我完全誤解了WinRT的工作原理。我的錯誤信息道歉。編輯該職位提到這一點。 – Polynomial

1

我在C#/ XAML的開發人員預覽版上構建了兩個完整的應用程序。 WinRT對象就像普通的C#對象一樣。不需要終結器或其他傳統的.NET/COM互操作。對.NET的預測使WinRT API非常無縫。

有一些地方COM泄漏。

  • 例外通過WinRT的對象拋出沒有堆棧跟蹤
  • 大部分通過WinRT的對象拋出的異常的有一個通用的異常類型和包括HRESULT錯誤代碼。

我希望這些問題將在今後得到解決版本的Windows 8的

也有一些冗餘現在在哪裏相似類型中都WinRT中和.NET(IObservableVectorINotifyCollectionChanged)定義

0

[一個除了Robert Sweeney's answer]

根據.NET框架的官方blog post

.NET API不通過WinRT公開,但仍可繼續按CLR公開的方式工作。

而且它說:

.NET開發人員並不陌生,互操作技術。您可以使用COM Interop和P/invoke從.NET代碼調用本機API。