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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk