Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengeksport Kelas yang Mengandungi std:: Objek daripada DLL?

Bagaimana untuk Mengeksport Kelas yang Mengandungi std:: Objek daripada DLL?

Linda Hamilton
Lepaskan: 2024-11-16 18:52:03
asal
665 orang telah melayarinya

How to Export Classes Containing std:: Objects from a DLL?

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;
Salin selepas log masuk

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:

  • Pembungkus Dll-Eksport: Cipta fungsi pengganti yang dieksport daripada DLL yang menjalankan operasi pada ahli.
  • Kaedah Arahan: Laksanakan kaedah yang memberikan arahan kepada ahli, sebaliknya mengeksport kaedah ini.
  • Idiom PIMPL: Gunakan simpulan bahasa Pelaksanaan Persendirian (PIMPL) untuk mengurangkan keterlihatan luaran ahli.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan