Bagaimanakah Anda Mengeksport Kelas yang Mengandungi std:: Objek daripada DLL?

Mary-Kate Olsen
Lepaskan: 2024-11-09 22:23:02
asal
685 orang telah melayarinya

How do You Export Classes Containing std:: Objects from a DLL?

Mengeksport Kelas yang Mengandungi std:: Objek daripada DLL

Apabila cuba mengeksport kelas yang mengandungi std:: objek, seperti vektor atau rentetan, daripada DLL, anda mungkin menghadapi amaran tentang keperluan untuk antara muka dll. Amaran ini dicetuskan apabila pengkompil mengesan bahawa ahli jenis kompleks dalam kelas tidak ditandakan secara eksplisit untuk eksport DLL.

Ke hadapan mengisytiharkan jenis ahli dengan DLL_EXPORT boleh menangani sebahagian isu tersebut. Walau bagaimanapun, untuk memastikan pengeksportan fungsi ahli yang betul, kelas yang sepadan dalam unit kompilasi mereka juga mesti ditandakan sebagai DLL_EXPORT.

Keperluan ini berpunca daripada fakta bahawa pengkompil tidak dapat menentukan kaedah kelas mana yang digunakan oleh pelanggan daripada kelas DLL_EXPORTed. Oleh itu, ia menguatkuasakan bahawa semua kaedah yang boleh diakses mesti dieksport. Mengabaikan amaran dan melumpuhkannya tidak dinasihatkan dalam konteks ini.

Untuk menangani amaran untuk ahli bukan dll-eksport, pendekatan berikut boleh dipertimbangkan:

  • Lumpuhkan amaran: Ini sesuai untuk ahli peribadi atau ahli yang tidak boleh diakses oleh pelanggan.
  • Buat pembungkus atau kaedah arahan: Ini melibatkan mencipta kaedah pembungkus DLL_EXPORT atau mencipta kaedah penyimpangan , dengan berkesan menyembunyikan pelaksanaan dalaman daripada pelanggan.
  • Gunakan PIMPL: Idiom ini membantu mengurangkan bilangan ahli yang boleh dilihat secara luaran, meminimumkan isu.

Dalam contoh disediakan, ke hadapan mengisytiharkan pengkhususan templat std::allocator dengan DLL_EXPORT menjana instantiasi pengkhususan templat dalam unit kompilasi semasa. Ini mencipta kaedah untuk std::allocator dalam DLL, termasuk eksportnya. Walau bagaimanapun, pendekatan ini tidak sesuai untuk kelas konkrit, kerana ia hanya menyokong instantiasi kelas templat.

Atas ialah kandungan terperinci Bagaimanakah Anda 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