次の方法で共有


__declspec(dllimport) を使ったデータのインポート

データの場合、__declspec(dllimport) は間接層を削除する便利なアイテムです。 DLL からデータをインポートする場合、インポート アドレス テーブル全体を更新する必要があります。 __declspec(dllimport) が導入される前は、DLL からエクスポートされたデータにアクセスするには、間接操作のレベルを追加する必要がありました。

// project.h
#ifdef _DLL   // If accessing the data from inside the DLL
   ULONG ulDataInDll;

#else         // If accessing the data from outside the DLL
   ULONG *ulDataInDll;
#endif

次に、.DEF ファイル内のデータをエクスポートします。

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

DLL の外部にあるデータにアクセスします。

if (*ulDataInDll == 0L) 
{
   // Do stuff here
}

データを __declspec(dllimport) として設定すると、間接コードが自動的に生成されます。 この場合は、上で説明した手順を実行する必要はありません。 前にも述べたように、DLL のビルド時にはデータに対して __declspec(dllimport) 宣言を使用しないでください。 DLL 内の関数は、インポート アドレス テーブルを使ってデータ オブジェクトにアクセスすることはできません。したがって、間接操作のレベルを追加することはできません。

データを DLL から自動的にエクスポートするには、次の宣言を使用します。

__declspec(dllexport) ULONG ulDataInDLL;

参照

概念

アプリケーションへのインポート