__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;