2009-03-27 21 views

答えて

12

.NETコンポーネントは、(メモリ処分があなたのために行われます)

COMは、ソフトウェアコンポーネントのインタフェース規格であるコード管理されています。 COMコンポーネントはアンマネージコードです(メモリの廃棄は参照カウントを使用して実行されます)。 hereから

どのようにCOMと.NETが関連していますか?

COMと.NETは補完的な開発です 技術。 .NET共通言語 ランタイムは、双方向のCOMとの透過的な統合 を提供します。この は、COMおよび.NETアプリケーション およびコンポーネントが各システムの機能 を使用できることを意味します。これにより、COM アプリケーションへの既存の投資 が保護され、 は制御された ペースで.NETを活用できます。 COMと.NETは同様の結果を得ることができます。 .NET Frameworkは、より堅牢な エビデンスベースのセキュリティモデル、 自動メモリ管理、およびネイティブ Webサービスのサポートを含む、 の重要な数字の の開発者を に提供します。新しい の開発では、 環境とサービスのため、 の優先テクノロジとして.NET を使用することをお勧めします。

+1

は実際に違いはありません。 .NET言語でCOMコンポーネントを作成することもできます。 .NETコンポーネントとCOMコンポーネントは相補的ではないため、そのような問題は完全ではありません。 –

+2

regasmを使用すると、COMから.NETコンポーネントをすべて使用できます。それはまだ.NETコンポーネントです... –

+1

@Mitch:私はあなたの答えを修正する必要がありますと思います。さらに多くのCOMコンポーネントがVB6で記述されています。このコンポーネントは、参照カウントを使用してメモリの廃棄を自動的に処理します。そのため、COM ==管理されていない点と.NET ==管理されている点が正しいわけではありません。 –

5

.NETコンポーネントはCLRで実行されますが、COMコンポーネントは本質的にネイティブのWindows DLLです。

.NETコンポーネントは、COMコンポーネントよりもはるかに多くのメタデータを公開します。この再設計は、コンポーネントの相互運用性を高めるために一部行われました。特に、.NETコンポーネントは、データレイアウトと呼び出し規約についてプラットフォーム固有の前提を作成しません。

Don Boxを参照してください。

+2

CLRは実際にCOMを使って書かれていますか?私はフレームワークライブラリの多くは、既存のCOMライブラリの周りのラッパーですが、実際のランタイム自体はCOMライブラリを使用して知っている? – sipwiz

+0

@sipwiz私は[CoreCLR repo](https://github.com/dotnet/coreclr)全体を見ていませんでしたが、まだCOMは見つかりませんでした。 – jrh

+1

@jrh、私はこの声明を削除しました。それは、2005年に私が読んだCLRの内部についてのDon Boxの本に基づいており、もう何もコピーを持っていません。これは、非常に初期のバージョンの.NET(* .NET *の前は*)に対して書かれたもので、本の一部が印刷される前に期限切れとなっていたと思われます。 .NETがもはやCOMベースではないと言っても過言ではありません。 – harpo

5

COMコンポーネントは、ソフトウェアをバイナリレベルで再利用できるように設計されたアンマネージC++コードコンポーネントです。 NETコンポーネントは類似している1)CLR言語で作成することができますが、COMコンポーネントはC++のみで構築することができます。2)管理されたランタイムで実行することを意図しています。私はそれらが本質的であると思う違い。

EDIT:

C++はCOMの中で最も "自然" 言語ですが、COMコンポーネントは、多くの言語で作成することができます。人々のコメントありがとう。

+3

これはあまり真実ではありません。 COMコンポーネントは、C#やVB.NetなどのC++、VB、.NET言語の多くの異なる言語で作成できます。 –

+0

VB?私は5.0日からそれを使用しませんが、それは本当かもしれません。 VBでは、いくつかのCOM関数のためのポインター・ポインター・パラメーターなどの処理方法を教えてください。 –

+1

divo私は調査してあなたが正しいと思う;) –

関連する問題