Bagikan melalui


DLL MFC Reguler Secara Statis Ditautkan ke MFC

DLL MFC reguler yang secara statis ditautkan ke MFC adalah DLL yang menggunakan MFC secara internal, dan fungsi yang diekspor di DLL dapat dipanggil oleh MFC atau non-MFC yang dapat dieksekusi. Seperti namanya, DLL semacam ini dibangun menggunakan versi pustaka tautan statis MFC. Fungsi biasanya diekspor dari DLL MFC reguler menggunakan antarmuka C standar. Untuk contoh cara menulis, membangun, dan menggunakan DLL MFC reguler, lihat sampel DLLScreenCap.

Perhatikan bahwa istilah USRDLL tidak lagi digunakan dalam dokumentasi Visual C++. DLL MFC reguler yang secara statis ditautkan ke MFC memiliki karakteristik yang sama dengan USRDLL sebelumnya.

DLL MFC reguler, yang secara statis ditautkan ke MFC, memiliki fitur-fitur berikut:

  • Klien yang dapat dieksekusi dapat ditulis dalam bahasa apa pun yang mendukung penggunaan DLL (C, C++, Pascal, Visual Basic, dan sebagainya); tidak harus menjadi aplikasi MFC.

  • DLL dapat menautkan ke pustaka tautan statis MFC yang sama yang digunakan oleh aplikasi. Tidak ada lagi versi terpisah dari pustaka tautan statis untuk DLL.

  • Sebelum MFC versi 4.0, USRDLL menyediakan jenis fungsionalitas yang sama dengan DLL MFC reguler yang secara statis ditautkan ke MFC. Pada Visual C++ versi 4.0, istilah USRDLL sudah usang.

DLL MFC reguler, yang secara statis ditautkan ke MFC, memiliki persyaratan berikut:

  • Jenis DLL ini harus membuat instans kelas yang berasal dari CWinApp.

  • Jenis DLL ini menggunakan yang DllMain disediakan oleh MFC. Tempatkan semua kode inisialisasi khusus DLL dalam InitInstance fungsi anggota dan kode penghentian seperti dalam ExitInstance aplikasi MFC normal.

  • Meskipun istilah USRDLL usang, Anda masih harus menentukan "_USRDLL" pada baris perintah kompilator. Definisi ini menentukan deklarasi mana yang ditarik dari file header MFC.

DLL MFC reguler harus memiliki CWinAppkelas -turunan dan satu objek dari kelas aplikasi tersebut, seperti halnya aplikasi MFC. Namun, CWinApp objek DLL tidak memiliki pompa pesan utama, seperti halnya CWinApp objek aplikasi.

Perhatikan bahwa CWinApp::Run mekanisme tidak berlaku untuk DLL, karena aplikasi memiliki pompa pesan utama. Jika DLL membuka dialog modeless atau memiliki jendela bingkai utama sendiri, pompa pesan utama aplikasi harus memanggil rutinitas yang diekspor oleh DLL yang pada gilirannya memanggil CWinApp::PreTranslateMessage fungsi anggota objek aplikasi DLL.

Untuk contoh fungsi ini, lihat sampel DLLScreenCap.

Simbol biasanya diekspor dari DLL MFC biasa menggunakan antarmuka C standar. Deklarasi fungsi yang diekspor dari DLL MFC biasa akan terlihat seperti ini:

extern "C" __declspec(dllexport) MyExportedFunction( );

Semua alokasi memori dalam DLL MFC reguler harus tetap berada dalam DLL; DLL tidak boleh meneruskan atau menerima dari panggilan yang dapat dieksekusi salah satu hal berikut:

  • Penunjuk ke objek MFC

  • Pointer ke memori yang dialokasikan oleh MFC

Jika Anda perlu melakukan salah satu hal di atas atau perlu meneruskan objek turunan MFC antara panggilan yang dapat dieksekusi dan DLL, Anda harus membangun DLL ekstensi MFC.

Aman untuk meneruskan pointer ke memori yang dialokasikan oleh pustaka run-time C antara aplikasi dan DLL hanya jika Anda membuat salinan data. Anda tidak boleh menghapus atau mengubah ukuran pointer ini atau menggunakannya tanpa membuat salinan memori.

DLL yang secara statis ditautkan ke MFC juga tidak dapat ditautkan secara dinamis ke DLL MFC bersama. DLL yang secara statis ditautkan ke MFC secara dinamis terikat ke aplikasi seperti DLL lainnya; aplikasi menautkannya sama seperti DLL lainnya.

Pustaka tautan statis MFC standar dinamai sesuai dengan konvensi yang dijelaskan dalam Konvensi Penamaan untuk DLL MFC. Namun, dengan MFC versi 3.0 dan yang lebih baru, tidak perlu lagi menentukan secara manual ke linker versi pustaka MFC yang ingin Anda tautkan. Sebagai gantinya, file header MFC secara otomatis menentukan versi pustaka MFC yang benar untuk ditautkan berdasarkan pendefinisian pra-prosesor, seperti _DEBUG atau _UNICODE. File header MFC menambahkan arahan /DEFAULTLIB yang menginstruksikan linker untuk ditautkan dalam versi tertentu dari pustaka MFC.

Apa yang ingin Anda lakukan?

Apa yang ingin Anda ketahui lebih lanjut?

Baca juga

Jenis DLL