Apabila bekerja dengan perpustakaan kongsi pada Windows, penentuan makro yang sesuai untuk mengeksport dan mengimport fungsi menjadi perlu. Pendekatan tradisional melibatkan penggunaan makro COMPILING_DLL.
Mentakrifkan COMPILING_DLL
Makro COMPILING_DLL lazimnya tidak ditakrifkan secara eksplisit dan bergantung pada tingkah laku lalai Visual Studio. Secara lalai, ia dianggap ditakrifkan apabila membina projek DLL dan tidak ditentukan apabila menggunakan DLL dalam aplikasi klien. Walau bagaimanapun, pendekatan ini boleh membawa kepada isu apabila menggunakan pemautan dinamik masa muat (LTDL), di mana anda tidak boleh menggunakan pengepala yang sama untuk kedua-dua senario.
Penyelesaian Alternatif
Satu alternatif untuk menggunakan COMPILING_DLL ialah menggunakan makro lalai yang ditakrifkan secara tempatan untuk projek. Secara lalai, Visual Studio mentakrifkan makro seperti MYDLL_EXPORTS dan MYDLL_IMPORTS untuk projek semasa. Makro ini boleh digunakan seperti berikut:
#ifdef MYDLL_EXPORTS /*Enabled as "export" while compiling the dll project*/ #define DLLEXPORT __declspec(dllexport) #else /*Enabled as "import" in the Client side for using already created dll file*/ #define DLLEXPORT __declspec(dllimport) #endif
Dalam contoh ini, dengan nama projek ialah "MyDLL," makro MYDLL_EXPORTS akan ditakrifkan semasa membina projek DLL dan tidak ditentukan apabila menggunakannya secara luaran. Dengan memanfaatkan makro lalai ini, anda boleh mentakrifkan makro DLLEXPORT dengan sewajarnya untuk kedua-dua senario tanpa bergantung pada kewujudan COMPILING_DLL.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan `dllexport`/`dllimport` dengan Berkesan dalam Perpustakaan Dikongsi Tanpa Bergantung pada `COMPILING_DLL`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!