Condividi tramite


DLL MFC regolari collegate a MFC in modo statico

Una NORMALE DLL MFC collegata in modo statico a MFC è una DLL che usa internamente MFC e le funzioni esportate nella DLL possono essere chiamate da eseguibili MFC o non MFC. Come descritto dal nome, questo tipo di DLL viene compilato usando la versione della libreria di collegamenti statica di MFC. Le funzioni vengono in genere esportate da una normale DLL MFC usando l'interfaccia C standard. Per un esempio di come scrivere, compilare e usare una NORMALE DLL MFC, vedere l'esempio DLLScreenCap.

Si noti che il termine USRDLL non viene più usato nella documentazione di Visual C++. Una NORMALE DLL MFC collegata a MFC ha le stesse caratteristiche dell'ex USRDLL.

Una NORMALE DLL MFC, collegata in modo statico a MFC, presenta le funzionalità seguenti:

  • L'eseguibile client può essere scritto in qualsiasi linguaggio che supporti l'uso di DLL (C, C++, Pascal, Visual Basic e così via); non deve essere un'applicazione MFC.

  • La DLL può collegarsi alle stesse librerie di collegamento statiche MFC usate dalle applicazioni. Non esiste più una versione separata delle librerie di collegamenti statici per le DLL.

  • Prima della versione 4.0 di MFC, gli USRDLL forniva lo stesso tipo di funzionalità delle normali DLL MFC collegate in modo statico a MFC. A partire da Visual C++ versione 4.0, il termine USRDLL è obsoleto.

Una NORMALE DLL MFC, collegata in modo statico a MFC, presenta i requisiti seguenti:

  • Questo tipo di DLL deve creare un'istanza di una classe derivata da CWinApp.

  • Questo tipo di DLL usa l'oggetto DllMain fornito da MFC. Inserire tutto il codice di inizializzazione specifico della InitInstance DLL nella funzione membro e nel codice di terminazione in ExitInstance come in una normale applicazione MFC.

  • Anche se il termine USRDLL è obsoleto, è comunque necessario definire "_USRDLL" nella riga di comando del compilatore. Questa definizione determina quali dichiarazioni vengono estratte dai file di intestazione MFC.

le DLL MFC regolari devono avere una CWinAppclasse derivata da -e un singolo oggetto della classe dell'applicazione, così come un'applicazione MFC. Tuttavia, l'oggetto CWinApp della DLL non dispone di un pump di messaggi principale, così come l'oggetto CWinApp di un'applicazione.

Si noti che il CWinApp::Run meccanismo non si applica a una DLL, perché l'applicazione è proprietaria dell'elemento message pump principale. Se la DLL apre finestre di dialogo senza modalità o ha una finestra cornice principale di propria proprietà, il pump del messaggio principale dell'applicazione deve chiamare una routine esportata dalla DLL che a sua volta chiama la CWinApp::PreTranslateMessage funzione membro dell'oggetto applicazione della DLL.

Per un esempio di questa funzione, vedere l'esempio DLLScreenCap.

I simboli vengono in genere esportati da una normale DLL MFC usando l'interfaccia C standard. La dichiarazione di una funzione esportata da una NORMALE DLL MFC sarà simile alla seguente:

extern "C" __declspec(dllexport) MyExportedFunction( );

Tutte le allocazioni di memoria all'interno di una normale DLL MFC devono rimanere all'interno della DLL; la DLL non deve passare o ricevere dal file eseguibile chiamante uno dei seguenti:

  • Puntatori a oggetti MFC

  • Puntatori alla memoria allocata da MFC

Se è necessario eseguire una delle operazioni precedenti o passare oggetti derivati da MFC tra il file eseguibile chiamante e la DLL, è necessario compilare una DLL di estensione MFC.

È sicuro passare puntatori alla memoria allocati dalle librerie di runtime C tra un'applicazione e una DLL solo se si crea una copia dei dati. Non è necessario eliminare o ridimensionare questi puntatori o usarli senza creare una copia della memoria.

Una DLL collegata in modo statico a MFC non può anche collegarsi dinamicamente alle DLL MFC condivise. Una DLL collegata in modo statico a MFC viene associata dinamicamente a un'applicazione come qualsiasi altra DLL; le applicazioni vi collegano esattamente come qualsiasi altra DLL.

Le librerie di collegamento statiche MFC standard sono denominate in base alla convenzione descritta in Convenzioni di denominazione per le DLL MFC. Tuttavia, con MFC versione 3.0 e successive, non è più necessario specificare manualmente al linker la versione della libreria MFC in cui si desidera collegare. I file di intestazione MFC determinano invece automaticamente la versione corretta della libreria MFC da collegare in base alle definizioni del preprocessore, ad esempio _DEBUG o _UNICODE. I file di intestazione MFC aggiungono direttive /DEFAULTLIB che indicano al linker di collegarsi in una versione specifica della libreria MFC.

Cosa vuoi fare?

Scegliere l'argomento su cui visualizzare maggiori informazioni

Vedi anche

Tipi di DLL