WinRT .NET 4.5 и RCW

Просто любопытно, есть ли у кого-нибудь достаточно времени с WinRT, чтобы понять, есть ли области в WinRT и .NET 4.5, которые стирают для программиста .NET некоторые старые элементы, встречающиеся в программировании VSTO и COM Interop Office, относящиеся к RCW, и различия в подсчет ссылок COM и сборщик мусора .NET за пределами использования финализатора (убедитесь, что вы получаете ссылку на все RCW .NET и т. д.).

Ничего страшного, просто любопытно, абстрагировались ли они от этих соображений или, что еще лучше, архитектура существенно отличается, и эти соображения даже не применимы.

заранее спасибо

Может быть, лучше задать вопрос, является ли это по-прежнему существенно той же архитектурой объектов .NET в управляемой/собранной модели памяти, ссылающейся на объекты COM (WinRT) в неуправляемой (но изолированной) архитектуре памяти с подсчетом ссылок?

Если в привязках метаданных или изолированной среде нет «волшебства», нам просто нужно будет применить тот же подход, который мы использовали с RCW.


person Alexander Hunter    schedule 04.10.2011    source источник
comment
Все, что я слышал и видел до сих пор, по-прежнему указывает на RCW и обычный бизнес. Если в CLR 4.5 были какие-либо изменения или запланированы какие-либо изменения, то это держится в секрете. stackoverflow.com/questions/7457371/why-is- winrt-unmanaged/ Ничего в недавнем интервью с Вэнсом Моррисоном также channel9.msdn.com/posts/   -  person Hans Passant    schedule 05.10.2011
comment
Я только что нашел комментарий к отдельному сообщению. Хотя уровень thunking использует RCW, RCW для среды выполнения Windows более легкие, чем старые RCW P/Invoke. — Ларри Остерман Отображение метаданных глубоко в CLR очень помогает (спасибо за сообщения, Пол) по сравнению с предыдущим COM-взаимодействием. Что мне нужно сказать, так это то, что некоторые из старых практик (VSTO и т. д.), обеспечивающие наличие явной ссылки на каждый RCW, все еще в игре, поэтому вы не получите RCW, ссылающийся на COM-объект, и вы можете не получить любой из них из памяти.   -  person Alexander Hunter    schedule 05.10.2011


Ответы (3)


Я создал два полных приложения в предварительной версии для разработчиков на C#/XAML. Объекты WinRT воспринимаются как обычные объекты C#. Нет необходимости в финализаторах или других традиционных средствах взаимодействия .NET/COM. Проекции на .NET делают WinRT API довольно удобным.

Есть некоторые области, где COM просачивается.

  • Исключения, создаваемые объектами WinRT, не имеют трассировки стека.
  • Большинство исключений, создаваемых объектами WinRT, имеют общий тип исключения и содержат код ошибки HRESULT.

Я ожидаю, что эти проблемы будут решены в будущих сборках Windows 8.

Кроме того, в WinRT и .NET определены некоторые избыточные типы (IObservableVector и INotifyCollectionChanged)

person Robert Sweeney    schedule 22.02.2012

[Дополнение к ответу Роберта Суини]

Согласно официальному документу .NET framework сообщение в блоге:

API-интерфейсы .NET не доступны через WinRT, но продолжают работать, как всегда, благодаря CLR.

Далее говорится:

Разработчики .NET знакомы с технологиями взаимодействия. Вы можете использовать как COM Interop, так и P/invoke для вызова собственных API-интерфейсов из кода .NET.

person Annie    schedule 27.11.2012

COM-взаимодействие на самом деле не применимо в WinRT, потому что WinRT полностью обходит архитектуру Win32 (т. е. они существуют параллельно). Поскольку COM находится поверх Win32, это совершенно отдельная сделка в контексте WinRT.

Редактировать: извините, я ошибся. Совершенно неправильно понял WinRT! См. комментарий Свика ниже.

person Polynomial    schedule 04.10.2011
comment
На самом деле, типы WinRT — это просто типы COM, которые реализуют IInspectable интерфейс. - person svick; 05.10.2011
comment
Насколько я понимаю, WinRT действительно реализован с помощью Win32, а типы WinRT — это просто COM с метаданными. - person Gabe; 05.10.2011
comment
@svick - Совершенно верно, я совершенно неправильно понял, как работает WinRT. Извиняюсь за дезинформацию. Отредактировал пост, чтобы упомянуть об этом. - person Polynomial; 05.10.2011