Aracılığıyla paylaş


MFC'ye Dinamik Olarak Bağlı Normal DLL'nin Modül Durumları

Normal DLL'yi MFC'ye dinamik olarak bağlama yeteneği oldukça karmaşık bazı yapılandırmalara izin verir. Örneğin, hem bir normal DLL hem bunu kullanan çalıştırılabilir birden MFC DLL'ye ve herhangi DLL uzantı DLL'sine dinamik olarak bağlanabilir.

Bu yapılandırma MFC genel verileriyle ilgili, geçerli CWinApp nesnesine ve tanıtıcı eşlemesine işaretçi gibi, soruna yol açar.

MFC sürüm 4.0'dan önce, bu genel veriler MFC DLL'nin kendisinde bulunurdu ve işlemdeki tüm modüller tarafından paylaşılırdı. Win32 DLL kullanan her işlem kendilerine DLL verilerinin bir kopyasını aldıkları için, bu düzen işlem başına veriyi izlemede kolay bir yol sağlamıştır. Ayrıca, AFXDLL modeli işlemde yalnızca bir CWinApp nesnesi ve bir tanıtıcı eşlemesi kümesi olacağını kabul ettiği için, bu ögeler MFC DLL'nin kendisinde izlenebilir.

Normal DLL'yi MFC DLL'ye dinamik olarak bağlama yeteneğiyle, artık bir işlemde iki ya da daha fazla CWinApp nesnesi - ve ayrıca iki ya da daha fazla tanıtıcı eşlemesi kümesi- olabilir. MFC hangilerini kullanması gerektiğini nasıl izliyor?

Çözüm her modüle (uygulama ya da normal DLL) bu genel durum bilgisinin kendi kopyasını vermektir. Böylece, normal DLL'deki AfxGetApp'e bir çağrı çalıştırılabilirdeki değil, DLL'deki CWinApp nesnesine bir işaretçi döndürür. MFC genel verilerinin bu modül başına kopyası modül durumu olarak bilinir ve MFC Teknik Not 58'de açıklanmıştır.

MFC genel pencere yordamı otomatik olarak doğru modül durumuna geçer, böylece normal DLL'nizde uygulanan hiçbir ileti işleyicisinde bunu düşünmeniz gerekmez. Ama çalıştırılabiliriniz normal DLL'yi çağırırsa, geçerli modül durumunu DLL için olana ayrıca ayarlamanız gerekir. Bunu yapmak için, DLL'den dışa aktarılmış her işlevde AFX_MANAGE_STATE makrosunu kullanın. Bu, DLL'den dışa aktarılmış işlevlerin başına aşağıdaki kod satırını ekleyerek yapılır.

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Hangi konu hakkında daha fazla bilgi edinmek istiyorsunuz?

Ayrıca bkz.

Kavramlar

DLL'ler