4

WinRTと.NET4.5に、RCWに関連するVSTOとCOM Interop Officeプログラミングで遭遇した古い項目のいくつかと、ファイナライザーを使用しないことを超えたCOM参照カウントと.NETGC(すべての.NET RCWなどへの参照を取得するようにしてください)。

それらがそれらの考慮事項を抽象化した場合、またはそれ以上にアーキテクチャが実質的に異なり、これらの懸念が適用できない場合でも、大したことではありません。

前もって感謝します

おそらく、質問をするためのより良い方法は、管理されていない(まだサンドボックス化されている)参照カウントメモリアーキテクチャのCOM(WinRT)オブジェクトを参照する管理された/ガベージコレクションされたメモリモデルの.NETオブジェクトと実質的に同じアーキテクチャであるかどうかです。

メタデータバインディングまたはサンドボックス環境に「魔法」がない限り、RCWで行ったのと同じアプローチを適用する必要があります。

4

3 に答える 3

1

C#/XAML の開発者プレビューで 2 つの完全なアプリを作成しました。WinRT オブジェクトは、通常の C# オブジェクトと同じように使用できます。ファイナライザーやその他の従来の .NET/COM 相互運用機能は必要ありません。.NET へのプロジェクションにより、WinRT API は非常にシームレスになります。

COM がリークする領域がいくつかあります。

  • WinRT オブジェクトによってスローされた例外にはスタック トレースがありません
  • WinRT オブジェクトによってスローされる例外の大部分には、汎用の例外の種類があり、HRESULT エラー コードが含まれています。

これらの問題は、Windows 8 の将来のビルドで解決されることを期待しています。

また、WinRT と .NET の両方で同様の型が定義されている冗長性もあります ( IObservableVectorINotifyCollectionChanged ) 。

于 2012-02-22T20:08:20.070 に答える
0

[ Robert Sweeneyの回答への追加]

.NET フレームワークの公式ブログ投稿によると:

.NET API は WinRT 経由では公開されませんが、CLR によって公開されるため、これまでどおり動作し続けます。

さらにそれは言う:

.NET 開発者は、相互運用テクノロジに精通しています。COM Interop と P/invoke の両方を使用して、.NET コードからネイティブ API を呼び出すことができます。

于 2012-11-27T04:15:00.680 に答える
-1

WinRTはWin32アーキテクチャを完全にバイパスするため(つまり、それらは並んで存在するため)、COM相互運用機能はWinRTには実際には適用できません。COMはWin32の上にあるため、WinRTのコンテキストでは完全に別個の取引です。

編集:申し訳ありません-私はここで間違っています。WinRTを完全に誤解しました!以下のsvickのコメントをご覧ください。

于 2011-10-04T22:59:27.450 に答える