Bagikan melalui


Mengimpor Menggunakan File DEF

Jika Anda memilih untuk menggunakan __declspec(dllimport) bersama dengan file .def, Anda harus mengubah file .def untuk menggunakan DATA sebagai pengganti CONSTANT untuk mengurangi kemungkinan bahwa pengkodean yang salah akan menyebabkan masalah:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   DATA

Tabel berikut ini memperlihatkan alasannya.

Kata kunci Memancarkan di pustaka impor Ekspor
CONSTANT _imp_ulDataInDll, _ulDataInDll _ulDataInDll
DATA _imp_ulDataInDll _ulDataInDll

Menggunakan __declspec(dllimport) dan CONSTANT mencantumkan imp versi dan nama yang tidak terdekorasi di pustaka impor DLL .lib yang dibuat untuk memungkinkan penautan eksplisit. Menggunakan __declspec(dllimport) dan DATA hanya mencantumkan imp versi nama.

Jika Anda menggunakan CONSTANT, salah satu konstruksi kode berikut dapat digunakan untuk mengakses ulDataInDll:

__declspec(dllimport) ULONG ulDataInDll; /*prototype*/
if (ulDataInDll == 0L)   /*sample code fragment*/

-atau-

ULONG *ulDataInDll;      /*prototype*/
if (*ulDataInDll == 0L)  /*sample code fragment*/

Namun, jika Anda menggunakan DATA dalam file .def, hanya kode yang dikompilasi dengan definisi berikut yang dapat mengakses variabel ulDataInDll:

__declspec(dllimport) ULONG ulDataInDll;

if (ulDataInDll == 0L)   /*sample code fragment*/

Menggunakan CONSTANT lebih berisiko karena jika Anda lupa menggunakan tingkat tidak langsung tambahan, Anda berpotensi mengakses pointer tabel alamat impor ke variabel — bukan variabel itu sendiri. Jenis masalah ini sering dapat bermanifestasi sebagai pelanggaran akses karena tabel alamat impor saat ini dibuat baca-saja oleh pengkompilasi dan linker.

Linker MSVC saat ini mengeluarkan peringatan jika melihat CONSTANT dalam file .def untuk memperhitungkan kasus ini. Satu-satunya alasan nyata untuk menggunakan CONSTANT adalah jika Anda tidak dapat mengkombinasikan ulang beberapa file objek di mana file header tidak tercantum __declspec(dllimport) pada prototipe.

Baca juga

Mengimpor ke dalam Aplikasi