DLL regolari collegate a MFC in modo statico

Una DLL regolare collegata a MFC in modo statico utilizza MFC internamente e le funzioni esportate da essa possono essere chiamate da file eseguibili MFC o non MFC. Questo tipo di DLL viene compilato mediante la versione della libreria a collegamento statico di MFC. Le funzioni sono generalmente esportate da una DLL regolare mediante l'interfaccia C standard. Per un esempio sulla creazione, sulla compilazione e sull'utilizzo di una DLL regolare, vedere DLLScreenCap.

Tenere presente che il termine USRDLL non è più utilizzato nella documentazione di Visual C++. Una DLL regolare collegata in modo statico a MFC possiede le stesse caratteristiche di USRDLL.

Di seguito sono elencate le funzionalità di una DLL regolare collegata a MFC in modo statico.

  • L'eseguibile client può essere compilato in uno qualsiasi dei linguaggi che supportano l'utilizzo delle DLL: C, C++, Pascal, Visual Basic e così via. Non occorre pertanto che sia un'applicazione MFC.

  • La DLL può essere collegata alle stesse librerie a collegamento statico MFC utilizzate dalle applicazioni. Non esiste più una versione distinta delle librerie a collegamento statico per le DLL.

  • Nelle versioni di MFC precedenti alla 4.0, i file USRDLL fornivano lo stesso tipo di funzionalità delle DLL regolari collegate a MFC in modo statico. A partire dalla versione 4.0 di Visual C++, il termine USRDLL è considerato obsoleto.

Di seguito sono elencati i requisiti di una DLL regolare collegata a MFC in modo statico.

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

  • Questo tipo di DLL utilizza DllMain fornita da MFC. Inserire tutto il codice di inizializzazione specifico della DLL nella funzione membro InitInstance e il codice di terminazione in ExitInstance come in una normale applicazione MFC.

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

Le DLL regolari devono avere una classe derivata da CWinApp e un singolo oggetto di tale classe applicazione, come le applicazioni MFC. Tuttavia, l'oggetto CWinApp della DLL non dispone di un message pump principale, a differenza dell'oggetto CWinApp di un'applicazione.

Tenere presente che il meccanismo CWinApp::Run non è applicabile a una DLL, poiché l'applicazione possiede il message pump principale. Se la DLL apre finestre di dialogo non modali o dispone di una propria finestra cornice principale, il message pump principale dell'applicazione deve chiamare una routine esportata dalla DLL che chiama a sua volta la funzione membro CWinApp::PreTranslateMessage dell'oggetto applicazione della DLL.

Un esempio di questa funzione è disponibile in DLLScreenCap.

I simboli sono generalmente esportati da una DLL regolare mediante l'interfaccia C standard. La dichiarazione di una funzione esportata da una DLL regolare è simile alla seguente:

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

Tutte le assegnazioni di memoria in una DLL regolare devono rimanere nella DLL, la quale non deve passare o ricevere uno dei seguenti elementi dall'eseguibile chiamante:

  • Puntatori agli oggetti MFC

  • Puntatori alla memoria allocata da MFC

Se è necessario effettuare una di queste operazioni o passare gli oggetti derivati da MFC tra l'eseguibile chiamante e la DLL, occorre compilare una DLL di estensione.

I puntatori alla memoria assegnata dalle librerie di runtime C possono essere passati in modo sicuro tra un'applicazione e una DLL solo se si effettua una copia dei dati. Non eliminare, ridimensionare o utilizzare questi puntatori senza creare una copia della memoria.

Una DLL collegata a MFC in modo statico non può essere anche collegata in modo dinamico alle DLL MFC condivise. Una DLL collegata a MFC in modo statico è associata in modo dinamico a un'applicazione come qualsiasi altra DLL e le applicazioni sono collegate a essa come a qualsiasi altra DLL.

Le librerie a collegamento statico 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 nel linker la versione della libreria MFC a cui si desidera essere collegati. Invece, i file di intestazione MFC determinano automaticamente la versione corretta della libreria MFC a cui collegarsi in base alle definizioni del preprocessore, ad esempio _DEBUG o _UNICODE. I file di intestazione MFC aggiungono direttive /DEFAULTLIB in base a cui il linker collega una versione specifica della libreria MFC.

Scegliere l'argomento con cui si desidera procedere

Scegliere l'argomento su cui visualizzare maggiori informazioni

Vedere anche

Concetti

Tipi di DLL