これら2つの違いの簡単で簡潔な説明を探しています。MSDN では、ここで詳細を詳しく説明することはしません。
4 に答える
__declspec( dllexport )
- そのようにタグ付けされたクラスまたは関数は、それが組み込まれている DLL からエクスポートされます。DLL を構築していて API が必要な場合は、このファイルまたはエクスポートを定義する別の .DEF ファイルを使用する必要があります ( MSDN)。これは定義を 1 か所に保持するので便利ですが、.DEF ファイルにはより多くのオプションがあります。
__declspec( dllimport )
- そのようにタグ付けされたクラスまたは関数は、DLL からインポートされます。これは実際には必要ありません。リンカを満足させるためには、とにかくインポート ライブラリが必要です。しかし、適切に でマークされているdllimport
場合、コンパイラとリンカーは呼び出しを最適化するのに十分な情報を持っています。これがないと、インポート ライブラリ内のスタブ関数への通常の静的リンクが得られ、不要な間接化が追加されます。ONT1 ONT2
__declspec(dllexport)
このオブジェクトを他の DLL がインポートできるようにすることをリンカに指示します。他のユーザーがリンクできる DLL を作成するときに使用されます。__declspec(dllimport)
アプリケーションで使用できるように、DLL から実装をインポートします。
私は初心者の C/C++ 開発者にすぎないので、おそらく誰かが私よりも優れた説明をしているでしょう。
2 つの異なる使用例:
1) dll 内でクラスの実装を定義しています。別のプログラムでそのクラスを使用したい。ここでは、dll で公開するクラスを作成しているため、dllexport を使用します。
2) dll が提供する関数を使用しています。dll で提供されるヘッダーを含めます。ここで、ヘッダーは dllimport を使用して、現在のプログラムで使用される実装を取り込みます。
多くの場合、両方のケースで同じヘッダー ファイルが使用され、マクロが定義されます。ビルド構成は、マクロが必要に応じてインポートまたはエクスポートされるように定義します。
Dllexport は、関数をエクスポート済みとしてマークするために使用されます。関数を DLL に実装し、エクスポートして、DLL を使用するすべてのユーザーが使用できるようにします。
Dllimport は逆です。関数が DLL からインポートされていることを示します。この場合、関数のシグネチャを宣言し、コードをライブラリにリンクするだけです。