WinRT .NET 4.5 dan RCW

Hanya ingin tahu apakah ada yang punya cukup waktu dengan WinRT untuk memahami apakah ada area di WinRT dan .NET 4.5 yang menghapus programmer .NET beberapa item lama yang ditemui dalam pemrograman VSTO dan COM Interop Office yang berkaitan dengan RCW dan perbedaannya. penghitungan referensi COM dan .NET GC selain tidak menggunakan finalizer (pastikan Anda mendapatkan referensi ke semua .NET RCW, dll).

Bukan masalah besar hanya ingin tahu apakah mereka mengabstraksikan pertimbangan-pertimbangan tersebut atau lebih baik lagi arsitekturnya berbeda secara material dan kekhawatiran ini bahkan tidak dapat diterapkan.

Terima kasih sebelumnya

Mungkin cara yang lebih baik untuk mengajukan pertanyaan adalah apakah arsitekturnya masih sama dengan Objek .NET dalam model memori yang dikelola/pengumpulan sampah yang merujuk pada objek COM (WinRT) dalam arsitektur memori penghitungan referensi yang tidak dikelola (belum dikotak pasir)?

Kecuali ada "keajaiban" dalam pengikatan meta data atau lingkungan sandbox, maka kita hanya perlu menerapkan pendekatan yang sama dengan RCW.


person Alexander Hunter    schedule 04.10.2011    source sumber
comment
Semua yang saya dengar dan lihat sejauh ini masih mengarah pada RCW dan bisnis seperti biasa. Jika ada perubahan apa pun di CLR 4.5 atau perubahan apa pun yang direncanakan maka hal itu dirahasiakan. stackoverflow.com/questions/7457371/why-is- winrt-unmanaged/ Tidak ada apa pun dalam wawancara baru-baru ini dengan Vance Morrison channel9.msdn.com/posts/   -  person Hans Passant    schedule 05.10.2011
comment
Saya baru saja menemukan komentar di posting terpisah Meskipun lapisan thunking menggunakan RCW, RCW untuk runtime windows lebih ringan daripada RCW P/Invoke yang lama. – Larry Osterman 15 September pukul 14:02. Pemetaan meta data jauh di dalam CLR sangat membantu (terima kasih untuk postingan Paul) dibandingkan Interop COM sebelumnya. Yang perlu saya perhatikan adalah apakah beberapa praktik lama (VSTO, dll) untuk memastikan Anda memiliki referensi eksplisit ke setiap RCW masih berlaku sehingga Anda tidak berakhir dengan RCW yang mereferensikan objek COM dan Anda bisa tidak satu pun dari mereka yang hilang dari ingatan.   -  person Alexander Hunter    schedule 05.10.2011


Jawaban (3)


Saya telah membuat dua aplikasi lengkap pada pratinjau pengembang di C#/XAML. Objek WinRT terasa seperti objek C# biasa. Tidak perlu finalizer atau interop .NET/COM tradisional lainnya. Proyeksi ke .NET membuat WinRT API cukup mulus.

Ada beberapa area dimana COM bocor.

  • Pengecualian yang diberikan oleh objek WinRT tidak memiliki jejak tumpukan
  • Mayoritas pengecualian yang diberikan oleh objek WinRT memiliki tipe pengecualian umum dan menyertakan kode kesalahan HRESULT.

Saya berharap masalah ini akan teratasi pada versi Windows 8 mendatang.

Kini terdapat beberapa redundansi di mana tipe serupa didefinisikan di WinRT dan .NET (IObservableVector dan INotifyCollectionBerubah)

person Robert Sweeney    schedule 22.02.2012

[Tambahan pada jawaban Robert Sweeney]

Menurut entri blog:

.NET API tidak diekspos melalui WinRT, tetapi terus berfungsi seperti biasanya, diekspos oleh CLR.

Lebih lanjut dikatakan:

Pengembang .NET tidak asing dengan teknologi interop. Anda dapat menggunakan COM Interop dan P/invoke untuk memanggil API asli dari kode .NET.

person Annie    schedule 27.11.2012

Interop COM tidak benar-benar berlaku di WinRT, karena WinRT sepenuhnya melewati arsitektur Win32 (yaitu keduanya ada berdampingan). Karena COM berada di atas Win32, ini merupakan kesepakatan yang sepenuhnya terpisah dalam konteks WinRT.

Sunting: Maaf - saya salah di sini. WinRT benar-benar salah paham! Silakan lihat komentar svick di bawah.

person Polynomial    schedule 04.10.2011
comment
Tidak juga, tipe WinRT pada dasarnya hanyalah tipe COM yang mengimplementasikan IInspectable antarmuka. - person svick; 05.10.2011
comment
Sejauh yang saya pahami, WinRT benar-benar diimplementasikan dengan tipe Win32 dan WinRT hanya COM dengan metadata. - person Gabe; 05.10.2011
comment
@svick - Benar sekali, saya benar-benar salah memahami cara kerja WinRT. Maaf atas kesalahan informasi saya. Mengedit postingan untuk menyebutkan ini. - person Polynomial; 05.10.2011