Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 (.exe file) 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, il file di intestazione AFX.H istruisce il linker su quale versione di MFC utilizzare: statica completa, statica limitata o condivisa; versione ANSI/MBCS o Unicode; e se eseguire il debug o utilizzare 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 nella sua forma codificata a caratteri ampi 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 supporto dei caratteri Unicode a byte singolo, multibyte o a caratteri larghi nell'IDE, utilizzare la finestra di dialogo Proprietà progetto. Nella pagina Proprietà> di configurazioneGenerale 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 hanno il formato
uAFXcd. Movimento di liberazione
dove le lettere indicate in corsivo sono segnaposto per gli identificatori i cui significati sono indicati 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) |
d | Debug o Release: D=Debug; omettere l'identificatore per Release |
Tutte le librerie elencate nella tabella seguente sono incluse nella directory \atlmfc\lib per le architetture di compilazione supportate.
Libreria | Descrizione |
---|---|
NAFXCW. Movimento di liberazione | Libreria MFC Static-Link, versione di rilascio |
NAFXCWD. Movimento di liberazione | MFC Static-Link Library, versione di debug |
UAFXCW. Movimento di liberazione | Libreria Static-Link MFC con supporto Unicode, versione di rilascio |
UAFXCWD. Movimento di liberazione | Libreria Static-Link MFC con supporto Unicode, versione di debug |
AFXNMCD. Movimento di liberazione | Libreria MFC Static-Link senza controlli di dialogo MFC, versione di rilascio |
AFXNMCDD. Movimento di liberazione | Libreria MFC Static-Link senza controlli di dialogo MFC, versione 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 |
---|---|
MFCversione.DLL | DLL MFC, versione di rilascio ANSI o MBCS |
MFCversioneU.DLL | DLL MFC, versione di rilascio Unicode |
MFCdella versioneD.DLL | DLL MFC, versione di debug ANSI o MBCS |
MFC UD.DLLversione | versione di debug Unicode di DLL MFC |
MFCMVersione.DLL | DLL MFC con controlli Windows Form, versione ANSI o MBCS Release |
MFCMversione diU.DLL | DLL MFC con controlli Windows Form, versione di rilascio Unicode |
D.DLLdella versioneMFCM | DLL MFC con controlli Windows Forms, versione di debug ANSI o MBCS |
MFCMdella versioneUD.DLL | DLL MFC con controlli Windows Forms, 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 laversioneMFC corrispondente.DLL o MFC U.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 meno recenti, 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 alle librerie di importazione MFCversione.LIB o MFCversioneU.LIB, è necessario distribuire la DLL condivisa MFC corrispondente MFCversione.DLL o MFCversioneU.DLL insieme alla tua DLL. Per altre informazioni, vedere DLL.