2008-09-12 38 views

答えて

35
  • は、このオブジェクトを他のDLLがインポートできるようにすることをリンカーに指示します。他の人がリンクできるDLLを作成するときに使用されます。

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

は私だけ初心者のC/C++開発者ですので、おそらく誰かのはI.

7

二つの異なるユースケースよりも良い説明だ:

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

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

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

8

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

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

62

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

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

+6

'dllimport'を使用しなかった場合の結果に関する非常に良い情報です。 – alecov

関連する問題