11

私の経験の大部分は、Java や VB.NET などの高水準言語に関するものです。私は(大学で)C++の経験があります。

COM DLL と .NET コンパイラによって生成される DLL の違いを理解しています。COM DLL と、C および C++ コンパイラによって生成された Windows DLL の違いがよくわかりません。

.NET プログラムで C++ DLL を使用したいと考えています。私はこれを機能させることができました。私の質問は具体的には次のとおりです。C++ によって生成された DLL と VB6 (COM ベース) によって生成された DLL の違いは何ですか。

これをグーグルで1時間かけてMSDNを調べました。質問しなくても答えが見つかると思っていましたが、そうではありません。

4

2 に答える 2

15

両者には大きな違いがあります。SO の投稿で正確に再現するにはリストが長すぎます。

  • C++ DLL は、クライアント コードで使用できるようにするすべての関数またはクラスをエクスポートする必要があります。COM DLL は、既知の名前と動作を持つ 4 つの関数のみをエクスポートします
  • C++ DLL を使用するアプリケーションは、リンク時にその DLL のインターフェイスを記述する必要があります。COM サーバーは実行時にバインドされます。
  • C++ DLL を使用するアプリケーションでは、Windows が起動時に DLL を検出できるようにする必要があります。通常は、EXE と同じディレクトリまたはパスに DLL を配置します。クライアント アプリがその場所を指定せずに、COM DLL が見つかりました。実行時にレジストリを使用して DLL を検索します。
  • COM サーバーは DLL である必要はありません。同じマシン上の別のプロセスや、地球の反対側にある別のマシンにある実行可能ファイルなど、何でもかまいません。クライアントコードは、それがどこにあるかを気にしません

COM のオートメーション サブセットに固有:

  • COM サーバーは、COM をサポートする任意の言語で使用できます。Windowsでは、どれがそれらのほぼすべてです。

最後の箇条書きは、COM dll と .NET dll の違いを理解していると思い込んでつまずく原因かもしれません。共通点はまったくありませんが、.NET は非常に優れており、COM サーバーと相互運用できます。Tlbimp.exe ユーティリティは、相違点を詳しく説明するのに非常に優れています。

于 2012-10-01T21:50:29.203 に答える
5

Com は、アプリケーションが互換性のあるバイナリ モジュールを利用できるようにするバイナリ標準です。com 標準を満たす限り、任意の言語で com 準拠ライブラリを作成できます。したがって、違いが何であるかは、一部のcomライブラリがネイティブマシンコードになるか、一部が管理され、インタープリターを介して実行されるかによって異なります。com が実際に意図していることは、c++ がソース レベルで持っていた oop スタイルとビルド済みバイナリの世界との間の使いやすさのギャップを埋めることです。

于 2012-10-01T21:06:43.967 に答える