質問

私はCOMを学ぶことを考えていますが、MicrosoftがCOMの代替として.NETを起動したと聞きました。それで、comを学ぶ価値はありますか?実際、私はUMDFデバイスドライバーのCOMを学習し始めました。 comを除いて、UMDFで作業する別の方法はありますか?

役に立ちましたか?

解決

UMDFは、ユーザーモードデバイスドライバーを開発するためのフレームワークです。デバイスドライバーの重要な要件は、高速でロードすることです。 .NETフレームワークをロードしてJITしなければならないファンキーなデバイスドライバーがいるからといって、スタートアップの時間を遅らせたくありません(それにもかかわらず)。

確かに、肥大化したCOMライブラリも開発できますが、有能になることでそれを避けることができます。 .NETランタイムを避けることはできません。

したがって、UMDFが.NET開発を許可したとしても、この時点で私は.NETでデバイスドライバーを書くことを望まないでしょう。

誤解しないでください。私は.netが大好きです。 Usermodeドライバーについて話している場合でも、それがデバイスドライバーとそれをうまく混ぜるとは思わないだけです。

COMを見るとき、それが開発された理由を理解するのに役立つと思います。さまざまな環境で開発されたコンポーネント間の相互利用可能性を提供することです。これは80年代に戻ってきました。今、人々は長年にわたってCOMについて不平を言ってきましたが、実際には非常に成功しています。 COMの展開モデル(つまり、レジストリ依存関係)や、開発者が頭をかき混ぜた他の興味深いデザインの選択には、いくつかの間違いがありました。ただし、com(すなわちiE iunknown)のコアは依然としてimoです。

他のヒント

comは古く、退屈でイライラしています。誰もがcomとの仕事を楽しんだことはないと思います。ですから、一般的に、本当に説得力のある理由がない限り、それを学ぶことをお勧めします。使用する必要があるcomライブラリがある場合は、代わりにcom interopを介して使用する方法を学びます。これにより、.netからcomを使用できます。

明確にするために、.NETはCOMの後任として非常に意図されていました。そして、それはうまくいきました、それは非常に成功しました。しかし、comはです どこにでも Windowsでは、典型的なプログラムでスティックを振ることはできず、どこかでcomに出くわすことはできません。これは、任意の.NET GUIプログラム[Stathread]の最初のコードから始まります。

Windowsには、フレンドリーな.NETラッパーをまだ入手していないものがたくさんあります。それは必ずしも必要ではありません。CLRは、COM Interopを優れたサポートに持っています。 [参照の追加]ダイアログから非常に表示される、comタブはグッズで満たされています。しかし、そのリストに表示されているのは、簡単に使いやすくなるように特別に設計されたコンポーネントです どれか 実行時環境。彼らは、「OLE Automation」と呼ばれるCOMのサブセットを実装します。

自動化は非常に制限されたサブセットです。実際にできることは限られているため、非常にうまく機能します。ただし、そのサブセットに合わないコードのゴブがあります。タイプライブラリが見つからない種類。タイプライブラリがなければ、.NETでねじ込まれています。その問題で最も目に見えるコンポーネントはシェルです。 Windowsエクスプローラ。マネージドコードでシェル拡張機能を作成するのはです 難しい.

問題は、COMインターフェイス宣言はもともと、複数の継承を実装するコンパイラでうまく機能するように設計されていたことです。 C ++具体的に。 .NETインターフェイス宣言は、そのcomインターフェイスが別のcomインターフェイスから派生した場合、comインターフェイスにうまくマッピングされません。 CLRは間違ったVテーブルを生成します。これはこれに触れられています MSDNマガジンの記事, 、著者の結論は非常に間違っているにもかかわらず。

できる .NET言語でcomインターフェイス宣言を作成し、それらを実装します。それはあなたが得るだけです いいえ SDKから助けてください。そして、あなたはそれらを正しくするためにComをかなりよく知る必要があること。

umdfはこのモデルにも適合し、そのインターフェイスはiunknownから派生しています。タイプライブラリはありません。私が知っている管理されたラッパーはありません。君 たぶん......だろう C#でコードを記述しますが、すべてのインターフェイス宣言を自分で記述する必要があります。現実的には、ここではC ++のみが適用されます。

はい、comを学ぶ必要があります。

comは、複数の言語から消費できる言語独立したAPIを構築できるため有用でした。現在、.NETは、あまりアクセスしにくいものですが、ほぼ腐った目的に使用されています。 .NETをプログラムすると、多くのCOM APIの「Just Work」をプログラムしますが、COMがどのように機能するかについての基本的な理解を得るのは良いことです(COMはメモリ管理に再カウンティングを使用しますが、.NETはガベージコレクションを使用します)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top