Bagikan melalui


Status Modul DLL MFC Reguler Yang Ditautkan Secara Dinamis ke MFC

Kemampuan untuk menautkan DLL MFC reguler secara dinamis ke DLL MFC memungkinkan beberapa konfigurasi yang sangat rumit. Misalnya, DLL MFC reguler dan yang dapat dieksekusi yang menggunakannya dapat secara dinamis ditautkan ke DLL MFC dan ke DLL ekstensi MFC apa pun.

Konfigurasi ini menimbulkan masalah sehubungan dengan data global MFC, seperti penunjuk ke objek saat ini CWinApp dan menangani peta.

Sebelum MFC versi 4.0, data global ini berada di DLL MFC itu sendiri dan dibagikan oleh semua modul dalam proses. Karena setiap proses menggunakan WIN32 DLL mendapatkan salinan data DLL sendiri, skema ini menyediakan cara mudah untuk melacak data per proses. Selain itu, karena model AFXDLL berasumsi bahwa hanya akan ada satu CWinApp objek dan hanya satu set peta penanganan dalam proses, item ini dapat dilacak di DLL MFC itu sendiri.

Tetapi dengan kemampuan untuk secara dinamis menautkan DLL MFC reguler ke DLL MFC, sekarang dimungkinkan untuk memiliki dua objek atau lebih CWinApp dalam proses — dan juga dua set peta handel atau lebih. Bagaimana MFC melacak MFC mana yang harus digunakan?

Solusinya adalah memberikan setiap modul (aplikasi atau DLL MFC reguler) salinan informasi status global ini sendiri. Dengan demikian, panggilan ke AfxGetApp di DLL MFC reguler mengembalikan penunjuk ke CWinApp objek di DLL, bukan yang dapat dieksekusi. Salinan per modul data global MFC ini dikenal sebagai status modul dan dijelaskan dalam MFC Tech Note 58.

Prosedur jendela umum MFC secara otomatis beralih ke status modul yang benar, sehingga Anda tidak perlu khawatir tentang hal itu di penangan pesan apa pun yang diterapkan di DLL MFC reguler Anda. Tetapi ketika panggilan yang dapat dieksekusi ke DLL MFC reguler, Anda harus secara eksplisit mengatur status modul saat ini ke yang untuk DLL. Untuk melakukan ini, gunakan makro AFX_MANAGE_STATE di setiap fungsi yang diekspor dari DLL. Ini dilakukan dengan menambahkan baris kode berikut ke awal fungsi yang diekspor dari DLL:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Apa yang ingin Anda ketahui lebih lanjut?

Baca juga

Membuat C/C++ DLL di Visual Studio