DLL'leri yönetmek için makrolar ve işlevler
Veri Akışı Adı | Açıklama |
---|---|
AFX_EXT_CLASS ] |
Sınıfları dışarı aktarır. |
AFX_MANAGE_STATE |
DLL'de dışarı aktarılan bir işlevi koruma. |
AfxOleInitModule |
MFC'ye dinamik olarak bağlı normal bir MFC DLL'sinden OLE desteği sağlar. |
AfxNetInitModule |
MFC'ye dinamik olarak bağlı normal bir MFC DLL'sinden MFC Yuvaları desteği sağlar. |
AfxGetAmbientActCtx |
Modül başına durum bayrağının geçerli durumunu alır. |
AfxGetStaticModuleState |
Başlatmadan önce modül durumunu ayarlar ve temizleme işleminden sonra önceki modül durumunu geri yükler. |
AfxInitExtensionModule |
DLL'yi başlatır. |
AfxSetAmbientActCtx |
MFC'nin WinSxS davranışını etkileyen modül başına durum bayrağını ayarlayın. |
AfxTermExtensionModule |
Her işlem DLL'den ayrılırken MFC'nin MFC uzantı DLL'sini temizlemesine izin verir. |
AFX_EXT_CLASS
MFC uzantısı DLL'leri sınıfları dışarı aktarmak için makroyu AFX_EXT_CLASS
kullanır; MFC uzantısı DLL'sine bağlanan yürütülebilir dosyalar, sınıfları içeri aktarmak için makroyu kullanır.
Açıklamalar
Makroyla AFX_EXT_CLASS
, MFC uzantısı DLL'sini oluşturmak için kullanılan üst bilgi dosyaları DLL'ye bağlanan yürütülebilir dosyalarla kullanılabilir.
DLL'nizin üst bilgi dosyasında, sınıfınızın bildirimine aşağıdaki gibi anahtar sözcüğünü ekleyin AFX_EXT_CLASS
:
class AFX_EXT_CLASS CMyClass : public CDocument
{
// <body of class>
};
Daha fazla bilgi için bkz . kullanarak AFX_EXT_CLASS
dışarı ve içeri aktarma.
Gereksinimler
Üst Bilgi:<afxv_dll.h>
AFX_MANAGE_STATE
DLL'de dışarı aktarılan bir işlevi korumak için bu makroya çağrıda bulunur.
Sözdizimi
AFX_MANAGE_STATE(AFX_MODULE_STATE* pModuleState )
Parametreler
pModuleState
Bir yapı işaretçisi AFX_MODULE_STATE
.
Açıklamalar
Bu makro çağrıldığında, pModuleState
hemen içeren kapsamın geri kalanı için etkili modül durumudur. Kapsam dışına çıktıktan sonra önceki geçerli modül durumu otomatik olarak geri yüklenir.
Yapı AFX_MODULE_STATE
, modülün genel verilerini, yani modül durumunun gönderilen veya alınan bölümünü içerir.
Varsayılan olarak MFC, kaynak şablonunu yüklemek için ana uygulamanın kaynak tutamacını kullanır. DLL'de, DLL'de bir iletişim kutusu başlatan işlev gibi dışarı aktarılan bir işleviniz varsa, kaynak şablonu DLL modülünde depolanır. Kullanılacak doğru tanıtıcı için modül durumunu değiştirmeyi unutmayın. aşağıdaki kodu işlevin başına ekleyerek durumu değiştirebilirsiniz:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
Bu makro geçerli modül durumunu, geçerli kapsamın sonuna kadar döndürülen AfxGetStaticModuleState
durumla değiştirir.
Modül durumları ve MFC hakkında daha fazla bilgi için bkz . MFC modüllerinin durum verilerini yönetme ve Teknik Not 58.
Not
MFC bir derleme için bir etkinleştirme bağlamı oluşturduğunda, bağlamı oluşturmak ve AFX_MANAGE_STATE
etkinleştirmek ve devre dışı bırakmak için kullanırAfxWinInit
. MFC kodunun AFX_MANAGE_STATE
Kullanıcı DLL'sinin seçtiği uygun etkinleştirme bağlamında yürütülmesine izin vermek için statik MFC kitaplıklarının yanı sıra MFC DLL'leri için de etkinleştirildiğini unutmayın. Daha fazla bilgi için bkz . MFC Modülü Durumunda Etkinleştirme Bağlamları Desteği.
Gereksinimler
Üst Bilgi:<afxstat_.h>
AfxOleInitModule
MFC'ye dinamik olarak bağlı normal bir MFC DLL'sinden OLE desteği için, MFC OLE DLL'sini CWinApp::InitInstance
başlatmak için normal MFC DLL'nizin işlevinde bu işlevi çağırın.
Sözdizimi
void AFXAPI AfxOleInitModule( );
Açıklamalar
MFC OLE DLL bir MFC uzantısı DLL'dir; MFC uzantı DLL'sinin zincire CDynLinkLibrary
bağlanabilmesi için, onu kullanacak olan her modül bağlamında bir CDynLinkLibrary
nesne oluşturması gerekir. AfxOleInitModule
CDynLinkLibrary
, normal MFC DLL'sinin nesne zincirine CDynLinkLibrary
bağlanabilmesi için nesneyi normal MFC DLL'nizin bağlamında oluşturur.
OLE denetimi oluşturuyorsanız ve kullanıyorsanızCOleControlModule
, için üye işlevi COleControlModule
çağrıları için InitInstance
çağrısı AfxOleInitModule
AfxOleInitModule
yapmamalısınız.
Gereksinimler
Üst bilgi: <afxdll_.h>
AfxNetInitModule
MFC'ye dinamik olarak bağlı normal bir MFC DLL'sinden MFC Yuvaları desteği için, MFC YuvaLARı DLL'sini CWinApp::InitInstance
başlatmak için normal MFC DLL'nizin işlevinde bu işleve bir çağrı ekleyin.
Sözdizimi
void AFXAPI AfxNetInitModule( );
Açıklamalar
MFC Yuva DLL'i bir MFC uzantısı DLL'dir; MFC uzantı DLL'sinin zincire CDynLinkLibrary
bağlanabilmesi için, onu kullanacak olan her modül bağlamında bir CDynLinkLibrary
nesne oluşturması gerekir. AfxNetInitModule
CDynLinkLibrary
, normal MFC DLL'sinin nesne zincirine CDynLinkLibrary
bağlanabilmesi için nesneyi normal MFC DLL'nizin bağlamında oluşturur.
Gereksinimler
Üst Bilgi:<afxdll_.h>
AfxGetAmbientActCtx
MFC'nin WinSxS davranışını etkileyen modül başına durum bayrağının geçerli durumunu almak için bu işlevi kullanın.
Sözdizimi
BOOL AFXAPI AfxGetAmbientActCtx();
Dönüş Değeri
Modül durumu bayrağı geçerli değer.
Açıklamalar
Bayrak ayarlandığında (varsayılan olan) ve bir iş parçacığı bir MFC modülüne girdiğinde (bkz AFX_MANAGE_STATE
. ), modülün bağlamı etkinleştirilir.
Bayrak ayarlı değilse, girişte modülün bağlamı etkinleştirilmez.
Modülün bağlamı, genellikle modül kaynaklarına eklenmiş bildiriminden belirlenir.
Gereksinimler
Üst Bilgi:<afxcomctl32.h>
AfxGetStaticModuleState
Başlatmadan önce modül durumunu ayarlamak ve temizlemeden sonra önceki modül durumunu geri yüklemek için bu işlevi çağırın.
Sözdizimi
AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState( );
Dönüş Değeri
Bir yapı işaretçisi AFX_MODULE_STATE
.
Açıklamalar
Yapı AFX_MODULE_STATE
, modülün genel verilerini, yani modül durumunun gönderilen veya alınan bölümünü içerir.
Varsayılan olarak MFC, kaynak şablonunu yüklemek için ana uygulamanın kaynak tutamacını kullanır. DLL'de, DLL'de bir iletişim kutusu başlatan işlev gibi dışarı aktarılan bir işleviniz varsa, kaynak şablonu DLL modülünde depolanır. Kullanılacak doğru tanıtıcı için modül durumunu değiştirmeyi unutmayın. aşağıdaki kodu işlevin başına ekleyerek durumu değiştirebilirsiniz:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
Bu makro geçerli modül durumunu, geçerli kapsamın sonuna kadar döndürülen AfxGetStaticModuleState
durumla değiştirir.
Modül durumları ve MFC hakkında daha fazla bilgi için bkz . MFC modüllerinin durum verilerini yönetme ve Teknik Not 58.
Gereksinimler
Üst Bilgi:<afxstat_.h>
AfxInitExtensionModule
DLL'yi başlatmak için MFC uzantısı DLL'lerinde DllMain
bu işlevi çağırın.
Sözdizimi
BOOL AFXAPI AfxInitExtensionModule( AFX_EXTENSION_MODULE& state, HMODULE hModule );
Parametreler
state
Başlatmadan AFX_EXTENSION_MODULE
sonra MFC uzantısı DLL modülünün durumunu içerecek Yapı yapısına başvuru. Durum, daha önce girilmeden önce DllMain
yürütülen normal statik nesne oluşturma işleminin bir parçası olarak MFC uzantı DLL'sinin başlatıldığı çalışma zamanı sınıfı nesnelerinin bir kopyasını içerir.
hModule
MFC uzantısı DLL modülünün tanıtıcısı.
Dönüş Değeri
TRUE
MFC uzantısı DLL başarıyla başlatılırsa; aksi takdirde , FALSE
.
Açıklamalar
Örneğin:
static AFX_EXTENSION_MODULE NVC_MFC_DLLDLL;
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("NVC_MFC_DLL.DLL Initializing!\n");
// MFC extension DLL one-time initialization
if (!AfxInitExtensionModule(NVC_MFC_DLLDLL, hInstance))
return 0;
...
AfxInitExtensionModule
DLL'nin HMODULE dosyasının bir kopyasını oluşturur ve DLL'nin çalışma zamanı sınıflarını (CRuntimeClass
yapıları) ve nesne fabrikalarını (COleObjectFactory
nesneleri) daha sonra CDynLinkLibrary
nesne oluşturulduğunda kullanmak üzere yakalar.
MFC uzantısı DLL'lerinin DllMain
işlevlerinde iki şey yapması gerekir:
Çağırın
AfxInitExtensionModule
ve dönüş değerini denetleyin.DLL, Yapı nesnelerini dışarı aktarıyorsa
CRuntimeClass
veya kendi özel kaynaklarına sahipse birCDynLinkLibrary
nesne oluşturun.
Her işlem MFC uzantı DLL'sinden ayrılırken (işlem çıktığında veya DLL bir AfxFreeLibrary
çağrı tarafından kaldırıldığında gerçekleşir) MFC uzantısı DLL'sini temizlemek için çağırabilirsinizAfxTermExtensionModule
.
Gereksinimler
Üst Bilgi:<afxdll_.h>
AfxSetAmbientActCtx
MFC'nin WinSxS davranışını etkileyen modül başına durum bayrağını ayarlamak için bu işlevi kullanın.
Sözdizimi
void AFXAPI AfxSetAmbientActCtx(BOOL bSet);
Parametreler
bSet
Modül durumu bayrağının yeni değeri.
Açıklamalar
Bayrak ayarlandığında (varsayılan olan) ve bir iş parçacığı bir MFC modülüne girdiğinde (bkz AFX_MANAGE_STATE
. ), modülün bağlamı etkinleştirilir.
Bayrak ayarlı değilse, girişte modülün bağlamı etkinleştirilmez.
Modülün bağlamı, genellikle modül kaynaklarına eklenmiş bildiriminden belirlenir.
Örnek
BOOL CMFCListViewApp::InitInstance()
{
AfxSetAmbientActCtx(FALSE);
// Remainder of function definition omitted.
}
Gereksinimler
Üst Bilgi:<afxcomctl32.h>
AfxTermExtensionModule
Her işlem DLL'den ayrılırken MFC uzantısı DLL'sini temizlemesine izin vermek için bu işlevi çağırın (işlem çıktığında veya DLL bir AfxFreeLibrary
çağrı tarafından kaldırıldığında gerçekleşir).
Sözdizimi
void AFXAPI AfxTermExtensionModule( AFX_EXTENSION_MODULE& state, BOOL bAll = FALSE );
Parametreler
state
MFC uzantı DLL modülünün durumunu içeren yapıya başvuru AFX_EXTENSION_MODULE
.
bAll
TRUE ise, tüm MFC uzantısı DLL modüllerini temizleyin. Aksi takdirde, yalnızca geçerli DLL modülünü temizleyin.
Açıklamalar
AfxTermExtensionModule
modüle bağlı tüm yerel depolamayı siler ve ileti eşleme önbelleğinden tüm girdileri kaldırır. Örneğin:
static AFX_EXTENSION_MODULE NVC_MFC_DLLDLL;
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("NVC_MFC_DLL.DLL Initializing!\n");
// MFC extension DLL one-time initialization
if (!AfxInitExtensionModule(NVC_MFC_DLLDLL, hInstance))
return 0;
new CMyDynLinkLibrary(NVC_MFC_DLLDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("NVC_MFC_DLL.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(NVC_MFC_DLLDLL);
}
return 1; // ok
}
Uygulamanız MFC uzantısı DLL'lerini dinamik olarak yükler ve serbest bırakırsa, öğesini çağırıp çağırmayı AfxTermExtensionModule
unutmayın. MFC uzantı DLL'lerinin çoğu dinamik olarak yüklenmediğinden (normalde, içeri aktarma kitaplıkları aracılığıyla bağlandığı için), çağrısı AfxTermExtensionModule
genellikle gerekli değildir.
MFC uzantısı DLL'lerinin içinde DllMain
çağrısı AfxInitExtensionModule
gerekir. DLL nesneleri dışarı aktarıyorsa CRuntimeClass
veya kendi özel kaynakları varsa, içinde DllMain
bir CDynLinkLibrary
nesne de oluşturmanız gerekir.
Gereksinimler
Üst Bilgi:<afxdll_.h>
Ayrıca bkz.
Makrolar ve genel ayarlar
AfxMessageBox
MFC modüllerinin durum verilerini yönetme