Tipi di DLL
Aggiornamento: novembre 2007
In questo argomento vengono fornite informazioni utili per stabilire quale tipo di DLL generare.
Tipi di DLL disponibili
Con Visual C++ è possibile generare DLL Win32 scritte in C o C++ che non utilizzano la libreria MFC (Microsoft Foundation Class). È possibile creare un progetto DLL non MFC con la Creazione guidata applicazioni Win32.
La libreria MFC stessa è disponibile, nelle librerie a collegamento statico o in alcune DLL, con la Creazione guidata DLL MFC. Se la DLL utilizza MFC, Visual C++ supporta tre diversi scenari di sviluppo delle DLL:
Generazione di una DLL regolare collegata a MFC in modo statico
Generazione di una DLL regolare collegata a MFC in modo dinamico
Generazione di una DLL di estensione MFC, collegata a MFC sempre in modo dinamico
Scegliere l'argomento su cui visualizzare maggiori informazioni
Scelta delle DLL da utilizzare
Scelta delle DLL da utilizzare
Se la DLL non utilizza MFC, utilizzare Visual C++ per generare una DLL Win32 non MFC. Il collegamento della DLL a MFC, statico o dinamico, richiede una notevole quantità di spazio su disco e di memoria. Non effettuare questo collegamento, a meno che la DLL non utilizzi realmente MFC.
Se la DLL si basa sulla libreria MFC e verrà utilizzata da applicazioni MFC e non MFC, è necessario generare una DLL regolare che si colleghi a MFC in modo dinamico o in modo statico. Nella maggior parte dei casi, è preferibile utilizzare una DLL regolare collegata a MFC in modo dinamico, poiché le dimensioni della DLL saranno notevolmente inferiori e sarà possibile risparmiare una quantità di memoria significativa grazie all'utilizzo della versione condivisa di MFC. Se si utilizza il collegamento statico a MFC, le dimensioni della DLL saranno molto maggiori e occorrerà potenzialmente memoria aggiuntiva a causa del caricamento della copia privata del codice della libreria MFC.
La generazione di una DLL con collegamento dinamico a MFC è più veloce rispetto a quella di una DLL con collegamento statico poiché non occorre collegare la libreria MFC. Ciò è particolarmente evidente nelle build di debug in cui il linker deve comprimere le informazioni di debug. Se si effettua il collegamento a una DLL che contiene già le informazioni di debug, si avranno meno informazioni di debug da comprimere nella DLL.
Uno svantaggio del collegamento dinamico a MFC è dato dal fatto che è necessario distribuire le DLL condivise Mfcx0.dll e Msvcrt.dll (o file simili) con la DLL. Le DLL MFC possono essere ridistribuite liberamente, ma occorre includerle nel programma di installazione e installarle tramite quest'ultimo. È inoltre necessario fornire il file Msvcrxx.dll, che contiene la libreria di runtime C utilizzata sia dal programma che dalle DLL MFC.
Se la DLL verrà utilizzata solo dagli eseguibili MFC, è possibile scegliere se generare una DLL regolare o di estensione. Se la DLL implementa classi riutilizzabili derivate dalle classi MFC esistenti o se occorre passare oggetti derivati da MFC tra l'applicazione e la DLL, sarà necessario generare una DLL di estensione.
Se la DLL si collega a MFC in modo dinamico, le DLL MFC possono essere ridistribuite con la DLL. Questa architettura è particolarmente utile per condividere la libreria di classi tra più file eseguibili per risparmiare spazio su disco e ridurre al minimo l'utilizzo della memoria.
Le versioni di Visual C++ precedenti alla 4.0 supportavano solo due tipi di DLL che utilizzavano MFC denominate USRDLL e AFXDLL. Le DLL regolari collegate a MFC in modo statico possiedono le stesse caratteristiche di USRDLL. Le DLL di estensione di MFC hanno le stesse caratteristiche di AFXDLL.