Bagikan melalui


Mengimpor data menggunakan __declspec(dllimport)

Dalam kasus data, menggunakan __declspec(dllimport) adalah item kenyamanan yang menghapus lapisan tidak langsung. Saat mengimpor data dari DLL, Anda masih harus melalui tabel alamat impor. Sebelum __declspec(dllimport), ini berarti Anda harus ingat untuk melakukan tingkat tidak langsung tambahan saat mengakses data yang diekspor dari 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

Anda kemudian akan mengekspor data di . File DEF:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

dan akses di luar DLL:

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

Saat Anda menandai data sebagai __declspec(dllimport), pengkompilasi secara otomatis menghasilkan kode tidak langsung untuk Anda. Anda tidak perlu lagi khawatir tentang langkah-langkah di atas. Seperti yang dinyatakan sebelumnya, jangan gunakan __declspec(dllimport) deklarasi pada data saat membangun DLL. Fungsi dalam DLL tidak menggunakan tabel alamat impor untuk mengakses objek data; oleh karena itu, Anda tidak akan memiliki tingkat tambahan tidak langsung yang ada.

Untuk mengekspor data secara otomatis dari DLL, gunakan deklarasi ini:

// 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

Baca juga

Mengimpor ke dalam Aplikasi