Versioni di librerie MFC
La libreria MFC è disponibile nelle versioni che supportano il codice ANSI a byte singolo e multibyte (MBCS), nonché le versioni che supportano Unicode (codificato come UTF-16LE, il set di caratteri nativo di Windows). Ogni versione MFC è disponibile come libreria statica o come DLL condivisa. È disponibile anche una versione più piccola della libreria statica MFC che esce dai controlli MFC per le finestre di dialogo, per le applicazioni molto sensibili alle dimensioni e che non richiedono tali controlli. Le librerie MFC sono disponibili sia nelle versioni di debug che nelle versioni di rilascio per le architetture supportate che includono processori x86, x64 e ARM. È possibile creare sia applicazioni (file con estensione exe) che DLL con qualsiasi versione delle librerie MFC. È inoltre disponibile un set di librerie MFC compilate per l'interazione con il codice gestito. Le DLL condivise MFC includono un numero di versione per indicare la compatibilità binaria della libreria.
Collegamento automatico delle versioni della libreria MFC
I file di intestazione MFC determinano automaticamente la versione corretta della libreria MFC da collegare, in base ai valori definiti nell'ambiente di compilazione. I file di intestazione MFC aggiungono direttive del compilatore che indicano al linker di collegarsi in una versione specifica della libreria MFC.
Ad esempio, AFX. Il file di intestazione H indica al linker di collegarsi nella versione statica completa, statica limitata o condivisa di MFC; ANSI/MBCS o versione Unicode; e eseguire il debug o la versione definitiva, a seconda della configurazione di compilazione:
#ifndef _AFXDLL
#ifdef _AFX_NO_MFC_CONTROLS_IN_DIALOGS
#ifdef _DEBUG
#pragma comment(lib, "afxnmcdd.lib")
#else
#pragma comment(lib, "afxnmcd.lib")
#endif
#pragma comment(linker, "/include:__afxNoMFCControlSupportInDialogs")
#pragma comment(linker, "/include:__afxNoMFCControlContainerInDialogs")
#endif
#ifndef _UNICODE
#ifdef _DEBUG
#pragma comment(lib, "nafxcwd.lib")
#else
#pragma comment(lib, "nafxcw.lib")
#endif
#else
#ifdef _DEBUG
#pragma comment(lib, "uafxcwd.lib")
#else
#pragma comment(lib, "uafxcw.lib")
#endif
#endif
#else
#ifndef _UNICODE
#ifdef _DEBUG
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "d.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "d.lib")
#else
#pragma comment(lib, "mfc" _MFC_FILENAME_VER ".lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER ".lib")
#endif
#else
#ifdef _DEBUG
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib")
#else
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib")
#endif
#endif
#endif
I file di intestazione MFC includono anche direttive per collegare tutte le librerie necessarie, incluse librerie MFC, librerie Win32, librerie OLE, librerie OLE create da esempi, librerie ODBC e così via.
ANSI, MBCS e Unicode
Le versioni della libreria MFC ANSI/MBCS supportano set di caratteri a byte singolo, ad esempio ASCII, e set di caratteri multibyte, ad esempio Shift-JIS. Le versioni della libreria Unicode MFC supportano Unicode nel formato con codifica a caratteri wide UTF-16LE. Usare le versioni della libreria ANSI/MBCS di MFC per il supporto Unicode con codifica UTF-8.
Per impostare la configurazione del progetto per l'uso di stringhe Unicode a byte singolo, multibyte o carattere wide nell'IDE, usare la finestra di dialogo Proprietà progetto. Nella pagina Proprietà>di configurazione Generale impostare la proprietà Set di caratteri su Non impostato per utilizzare un set di caratteri a byte singolo. Impostare la proprietà su Usa set di caratteri multibyte per usare un set di caratteri multibyte oppure su Usa set di caratteri Unicode per usare la codifica Unicode come UTF-16.
I progetti MFC usano il simbolo del preprocessore _UNICODE per indicare il supporto Unicode a caratteri wide UTF-16 e _MBCS per indicare il supporto MBCS. Queste opzioni si escludono a vicenda in un progetto.
Convenzioni di denominazione della libreria statica MFC
Le librerie statiche per MFC usano le convenzioni di denominazione seguenti. I nomi delle librerie si presentano come
uAFXcd. LIB
dove le lettere mostrate in minuscolo corsivo sono dei segnaposti per gli identificatori i cui significati sono mostrati nella tabella seguente:
Identificatore | Valori e significati |
---|---|
u | ANSI/MBCS (N) o Unicode (U); omettere per la versione senza controlli MFC nelle finestre di dialogo |
c | Versione con controlli MFC nelle finestre di dialogo (CW) o senza (NMCD) |
g | Debug o Release: D=Debug; omettere l'identificatore per le versioni di rilascio |
Tutte le librerie elencate nella tabella seguente sono incluse nella directory \atlmfc\lib per le architetture di compilazione supportate.
Libreria | Descrizione |
---|---|
NAFXCW.LIB | Libreria a collegamento statico MFC, versione di rilascio |
NAFXCWD.LIB | Libreria a collegamento statico MFC, versione di debug |
UAFXCW. LIB | Libreria a collegamento statico MFC con supporto Unicode, versione di rilascio |
UAFXCWD. LIB | Libreria a collegamento statico MFC con supporto Unicode, versione di debug |
AFXNMCD. LIB | Libreria MFC static-link senza controlli della finestra di dialogo MFC, versione di rilascio |
AFXNMCDD. LIB | Libreria MFC static-link senza controlli della finestra di dialogo MFC, versione di debug |
I file del debugger con lo stesso nome di base e un'estensione pdb sono disponibili anche per ognuna delle librerie statiche.
Convenzioni di denominazione delle DLL condivise MFC
Le DLL condivise MFC seguono anche una convenzione di denominazione strutturata. In questo modo è più semplice sapere quale DLL o libreria usare per quale scopo.
Le DLL MFC hanno numeri di versione che indicano la compatibilità binaria. Usare DLL MFC con la stessa versione delle altre librerie e del set di strumenti del compilatore per garantire la compatibilità all'interno di un progetto.
DLL | Descrizione |
---|---|
MFCversion.DLL | DLL MFC, VERSIONE ANSI o MBCS |
U.DLL versioneMFC | DLL MFC, versione di rilascio Unicode |
D.DLL versioneMFC | DLL MFC, versione di debug ANSI o MBCS |
MFCversioneUD.DLL | DLL MFC, versione di debug Unicode |
MFCMversion.DLL | DLL MFC con controlli Windows Form, VERSIONE ANSI o MBCS |
MFCMversioneU.DLL | DLL MFC con controlli Windows Form, versione di rilascio Unicode |
MFCMversioneD.DLL | DLL MFC con controlli Windows Form, ANSI o MBCS Versione di debug |
MFCMversioneUD.DLL | DLL MFC con controlli Windows Form, versione di debug Unicode |
Le librerie di importazione necessarie per compilare applicazioni o DLL di estensione MFC che usano queste DLL condivise hanno lo stesso nome di base della DLL, ma hanno un'estensione di file lib. Quando si usano le DLL condivise, una piccola libreria statica deve comunque essere collegata al codice; questa libreria è denominata MFCSversion{U}{D}.lib.
Se si esegue il collegamento dinamico alla versione DLL condivisa di MFC, indipendentemente dal fatto che si tratti di un'applicazione o da una DLL di estensione MFC, è necessario includere la versione MFCcorrispondente.DLL o la versioneMFCU.DLL quando si distribuisce il prodotto.
Per un elenco delle DLL di Visual C++ che possono essere distribuite con le applicazioni, vedere Codice distribuibile per Microsoft Visual Studio 2017 e Microsoft Visual Studio 2017 SDK (include utilità e file buildserver) o codice distribuibile per Visual Studio 2019.
Per altre informazioni sul supporto di MBCS e Unicode in MFC, vedere Supporto per set di caratteri Unicode e multibyte (MBCS).
Supporto della libreria a collegamento dinamico
È possibile usare le librerie MFC statiche o condivise per creare DLL che possono essere usate sia da file eseguibili MFC che non MFC. Queste dll sono denominate "DLL regolari" o "DLL MFC regolari", per distinguerle dalle DLL di estensione MFC che possono essere usate solo dalle app MFC e dalle DLL MFC. Una DLL compilata usando le librerie statiche MFC è talvolta denominata USRDLL nei riferimenti precedenti, perché i progetti DLL MFC definiscono il simbolo del preprocessore _USRDLL. Una DLL che usa le DLL condivise MFC viene talvolta chiamata AFXDLL nei riferimenti precedenti, perché definisce il simbolo del preprocessore _AFXDLL.
Quando si crea il progetto DLL collegando le librerie statiche MFC, la DLL può essere distribuita senza le DLL condivise MFC. Quando il progetto DLL si collega alla versione MFCdelle librerie di importazione. LIB o versione MFCU.LIB, è necessario distribuire la DLL condivisa MFC corrispondente versione MFCversione.DLL o MFCU.DLLinsieme alla DLL. Per altre informazioni, vedere DLL.