使用 匯入資料 __declspec(dllimport)
如果是資料,使用 __declspec(dllimport)
是一個便利專案,可移除一層間接取值。 當您從 DLL 匯入資料時,您仍然需要通過匯入位址表。 在 之前 __declspec(dllimport)
,這表示您在存取從 DLL 匯出的資料時,必須記得執行額外的間接存取:
// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS // 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 自動匯出資料,請使用下列宣告:
// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS // If accessing the data from inside the DLL
__declspec(dllexport) ULONG ulDataInDLL;
#else // If accessing the data from outside the DLL
__declspec(dllimport) ULONG ulDataInDLL;
#endif