Mengeksport Kelas Mengandungi std:: Objek daripada DLL
Apabila mengeksport kelas yang mengandungi objek seperti std::vectors dan std::strings from DLL, amaran, seperti "class 'std::map<_Kty,_Ty>' memerlukan antara muka dll untuk digunakan oleh pelanggan kelas 'FontManager'", mungkin timbul. Amaran ini menunjukkan bahawa jenis ahli kelas memerlukan antara muka DLL untuk boleh diakses oleh kod klien.
Pengisytiharan Hadapan Bekas Standard
Untuk menyelesaikan isu ini, majukan pengisytiharan kelas dengan DLL_EXPORT boleh diletakkan sebelum pembolehubah ahli, seperti yang ditunjukkan di bawah:
template class DLL_EXPORT std::allocator<tCharGlyphProviderRef>; template class DLL_EXPORT std::vector<tCharGlyphProviderRef,std::allocator<tCharGlyphProviderRef> >; std::vector<tCharGlyphProviderRef> m_glyphProviders;
Walaupun pendekatan ini mungkin alih keluar amaran, ia tidak menjamin ketersediaan antara muka DLL untuk fungsi ahli.
Keperluan Antara Muka DLL
Untuk memastikan kefungsian DLL yang betul, kelas dan fungsi ahlinya mesti mempunyai antara muka DLL. Ini bermakna pengkompil menjana fungsi dalam DLL itu sendiri, menjadikannya boleh diimport. Kegagalan menyediakan antara muka ini untuk ahli yang boleh diakses oleh kod pelanggan akan mengakibatkan amaran atau ralat semasa penyusunan atau pemautan.
Ahli dan Amaran Persendirian
Ahli persendirian tidak boleh diakses oleh pelanggan boleh dikecualikan daripada pengisytiharan DLL_EXPORT. Amaran untuk ahli sedemikian boleh dilumpuhkan. Walau bagaimanapun, berhati-hati harus dilakukan untuk pemusnah dan pembina yang dijana oleh pengkompil.
Pengendalian Ahli Dll-Exportable
Ahli yang mesti digunakan oleh pelanggan memerlukan sama ada:
Instansiasi Kelas Templat
Majukan pengisytiharan kelas templat dengan DLL_EXPORT hanya mencipta instantiasi dalam unit kompilasi semasa. Pendekatan ini tidak mencukupi untuk kelas bukan templat.
Atas ialah kandungan terperinci Bagaimana untuk Mengeksport Kelas yang Mengandungi std:: Objek daripada DLL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!