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