Aracılığıyla paylaş


Dışa Aktarılan DLL İşlev Giriş Noktaları

DLL'nin dışarı aktarılan işlevleri için, DLL modülünden çağıran uygulamanın DLL'sine geçiş yaparken uygun genel durumu korumak için AFX_MANAGE_STATE makrosunu kullanın.

Çağrıldığında, bu makro pModuleStateişlevi içeren kapsamın geri kalanı için geçerli modül durumu olarak modülün genel verilerini içeren bir AFX_MODULE_STATE yapıya yönelik bir işaretçi ayarlar. Makroyu içeren kapsamdan ayrıldıktan sonra, önceki geçerli modül durumu otomatik olarak geri yüklenir.

Bu geçiş, yığında bir AFX_MODULE_STATE sınıfın örneği oluşturarak gerçekleştirilir. Oluşturucusunda, bu sınıf geçerli modül durumuna bir işaretçi alır ve bunu bir üye değişkeninde depolar ve ardından yeni etkili modül durumu olarak ayarlar pModuleState . Yıkıcısında bu sınıf, üye değişkeninde depolanan işaretçiyi etkili modül durumu olarak geri yükler.

DLL'nizde bir iletişim kutusu başlatan işlev gibi dışarı aktarılan bir işleviniz varsa, işlevin başına aşağıdaki kodu eklemeniz gerekir:

AFX_MANAGE_STATE(AfxGetStaticModuleState())

Bu, geçerli modül durumunu, geçerli kapsamın sonuna kadar AfxGetStaticModuleState'ten döndürülen durumla değiştirir.

Makro kullanılmazsa AFX_MANAGE_STATE DLL'lerdeki kaynaklarla ilgili sorunlar oluşur. Varsayılan olarak MFC, kaynak şablonunu yüklemek için ana uygulamanın kaynak tutamacını kullanır. Bu şablon aslında DLL'de depolanır. Bunun kök nedeni, MFC'nin modül durumu bilgilerinin makro tarafından AFX_MANAGE_STATE değiştirilmemiş olmasıdır. Kaynak tanıtıcısı MFC'nin modül durumundan kurtarılır. Modül durumunun değiştirilmemesi yanlış kaynak tanıtıcısının kullanılmasına neden olur.

AFX_MANAGE_STATE DLL'deki her işleve konulması gerekmez. Örneğin, InitInstance MFC modül durumunu önceki modül durumunu InitInstance otomatik olarak kaydırdığından ve döndürdüğünde InitInstance geri döndürdüğünden, uygulamadaki AFX_MANAGE_STATE MFC kodu tarafından çağrılabilir. Aynı durum tüm ileti eşleme işleyicileri için de geçerlidir. Normal MFC DLL'leri aslında herhangi bir iletiyi yönlendirmeden önce modül durumunu otomatik olarak değiştirir özel bir ana pencere yordamına sahiptir.

Ayrıca bkz.

MFC Modüllerinin Durum Verisini Yönetme