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

Patricia Arquette
Lepaskan: 2024-11-10 05:04:02
asal
864 orang telah melayarinya

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

Mengeksport Kelas Mengandungi std:: Objek (Vektor, Peta, dll.) daripada DLL

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:

  • Lumpuhkan Amaran: Bagi ahli yang tidak boleh dieksport, amaran boleh dilumpuhkan untuk mengelakkan kekacauan.
  • Pembungkus Eksport DLL: Cipta fungsi pembungkus eksport DLL atau kaedah arahan untuk ahli yang perlu dieksport.
  • Idiom PIMPL: Gunakan simpulan bahasa PIMPL untuk mengurangkan bilangan ahli yang boleh dilihat secara luaran.

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!

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