Pengenalan
Mengeksport kelas yang mengandungi objek kompleks seperti vektor dan rentetan daripada DLL menimbulkan kebimbangan mengenai keperluan antara muka DLL. Artikel ini menganalisis isu dan meneroka penyelesaian untuk mengeksport kelas sedemikian sambil menangani amaran pengkompil.
Amaran Pengkompil
Apabila cuba mengeksport kelas yang mengandungi objek std::, pengkompil boleh mengeluarkan amaran tentang ahli yang memerlukan antara muka DLL. Amaran ini menunjukkan bahawa pengkompil tidak dapat memastikan bahawa kaedah kelas yang dieksport tersedia untuk pelanggan yang menggunakan DLL.
Pengisytiharan Hadapan
Satu pendekatan untuk menangani amaran ini adalah dengan menggunakan perisytiharan ke hadapan dengan DLL_EXPORT. Walaupun ini mungkin menyekat amaran, ia sebenarnya tidak mengeksport kaedah yang diperlukan. Untuk menyelesaikan isu sepenuhnya, kelas yang mengandungi objek std:: mesti ditandakan sebagai DLL_EXPORT dalam unit kompilasinya.
Kebolehcapaian Ahli
Bukan semua ahli yang dieksport. kelas perlu DLL_EXPORT. Ahli persendirian yang tidak boleh diakses oleh pelanggan boleh diabaikan atau amaran mereka dilumpuhkan. Walau bagaimanapun, ahli yang boleh berinteraksi dengan pelanggan mesti mengeksport kaedah mereka.
Penyelesaian Kemungkinan
Bergantung pada senario, beberapa pendekatan boleh dipertimbangkan:
Pengisytiharan dan Instalasi Hadapan
Pengisytiharan hadapan kelas templat dengan DLL_EXPORT memang mencipta instantiasi dalam unit kompilasi semasa. Walau bagaimanapun, ini hanya terpakai pada pengkhususan templat dan bukan untuk kelas konkrit, yang perlu ditandakan sebagai DLL_EXPORT secara eksplisit.
Atas ialah kandungan terperinci Bagaimana untuk Mengeksport Kelas yang Mengandungi Objek `std::` daripada DLL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!