65

これら2つの違いの簡単で簡潔な説明を探しています。MSDN では、ここで詳細を詳しく説明することはしません。

4

4 に答える 4

90

__declspec( dllexport )- そのようにタグ付けされたクラスまたは関数は、それが組み込まれている DLL からエクスポートされます。DLL を構築していて API が必要な場合は、このファイルまたはエクスポートを定義する別の .DEF ファイルを使用する必要があります ( MSDN)。これは定義を 1 か所に保持するので便利ですが、.DEF ファイルにはより多くのオプションがあります。

__declspec( dllimport )- そのようにタグ付けされたクラスまたは関数は、DLL からインポートされます。これは実際には必要ありません。リンカを満足させるためには、とにかくインポート ライブラリが必要です。しかし、適切に でマークされているdllimport場合、コンパイラとリンカーは呼び出しを最適化するのに十分な情報を持っています。これがないと、インポート ライブラリ内のスタブ関数への通常の静的リンクが得られ、不要な間接化が追加されます。ONT1 ONT2

于 2008-09-12T00:43:53.710 に答える
57
  • __declspec(dllexport)このオブジェクトを他の DLL がインポートできるようにすることをリンカに指示します。他のユーザーがリンクできる DLL を作成するときに使用されます。

  • __declspec(dllimport)アプリケーションで使用できるように、DLL から実装をインポートします。

私は初心者の C/C++ 開発者にすぎないので、おそらく誰かが私よりも優れた説明をしているでしょう。

于 2008-09-12T00:41:42.747 に答える
12

2 つの異なる使用例:

1) dll 内でクラスの実装を定義しています。別のプログラムでそのクラスを使用したい。ここでは、dll で公開するクラスを作成しているため、dllexport を使用します。

2) dll が提供する関数を使用しています。dll で提供されるヘッダーを含めます。ここで、ヘッダーは dllimport を使用して、現在のプログラムで使用される実装を取り込みます。

多くの場合、両方のケースで同じヘッダー ファイルが使用され、マクロが定義されます。ビルド構成は、マクロが必要に応じてインポートまたはエクスポートされるように定義します。

于 2008-09-12T00:43:32.773 に答える
10

Dllexport は、関数をエクスポート済みとしてマークするために使用されます。関数を DLL に実装し、エクスポートして、DLL を使用するすべてのユーザーが使用できるようにします。

Dllimport は逆です。関数が DLL からインポートされていることを示します。この場合、関数のシグネチャを宣言し、コードをライブラリにリンクするだけです。

于 2008-09-12T00:43:34.117 に答える