Aracılığıyla paylaş


DLL'leri yönetmek için makrolar ve işlevler

Ad Tanım
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_CLASSdış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.

Dekont

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. AfxOleInitModuleCDynLinkLibrary, 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ı AfxOleInitModuleAfxOleInitModuleyapmamalı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. AfxNetInitModuleCDynLinkLibrary, 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();

İade 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( );

İade 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ı.

İade Değeri

TRUE MFC uzantısı DLL başarıyla başlatılırsa; aksi takdirde , FALSE.

Açıklamalar

Örnek:

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:

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. Örnek:

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ı AfxTermExtensionModuleunutmayı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 DllMainbir 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