TN057: Localizzazione di componenti MFC

[!NOTA]

La seguente nota tecnica non è stata aggiornata dalla prima volta che viene inclusa nella documentazione online.Di conseguenza, alcune procedure e argomenti potrebbero non essere aggiornati o errati.Per le informazioni più recenti, è consigliabile cercare l'argomento di interesseindice della documentazione online.

Questa nota descritte alcune progettazioni e procedure che è possibile utilizzare per localizzare il componente, se un'applicazione o un controllo OLE o una DLL che utilizza MFC.

Panoramica

Esistono in realtà due problema alla risoluzione durante la localizzazione automatica di un componente che utilizza MFC.Innanzitutto, è necessario localizzare le risorse — stringhe, finestre di dialogo e altre risorse specifiche al componente.La maggior parte dei componenti compilati utilizzando MFC includono anche e utilizzano diverse risorse definite da MFC.È necessario fornire le risorse localizzate MFC anche.Fortunatamente, in diversi linguaggi sono già forniti dalla libreria MFC.

Inoltre, il componente deve essere preparare eseguire nel relativo ambiente di destinazione (ambiente europei o DBCS-abilitato).In genere, questo dipende dall'applicazione che analizza i caratteri con un bit significativi impostato correttamente e che gestisce le stringhe con una coppia di caratteri in byte.MFC è abilitato, per impostazione predefinita, per entrambi gli ambienti, in modo che è possibile avere un singolo binario universale utilizzato su tutte le piattaforme solo con risorse diverse inserite in fase di installazione.

Localizzazione delle risorse del componente

Localizzare l'applicazione o DLL deve includere semplicemente sostituire le risorse con le risorse corrispondenti alla lingua di destinazione.Per le risorse, questo è relativamente semplice: modificare le risorse nell'editor risorse e compilare l'applicazione.Se il codice è stato scritto correttamente non saranno stringhe o manderanno un testo a cui si desidera localizzare specificato a livello di codice nel codice sorgente C++ – qualsiasi localizzazione può essere eseguita semplicemente modificando le risorse.Infatti, è possibile distribuire il componente in modo che tutto specificare una versione localizzata non include una compilazione del codice originale.Ciò è più complessa, ma è consigliabile opportuno e è il meccanismo scelto della libreria MFC.È inoltre possibile localizzare un'applicazione caricando file EXE o DLL nell'editor risorse e la modifica delle risorse direttamente.Quando possibile, richiede la riapplicazione delle modifiche ogni volta che si compila una nuova versione dell'applicazione.

Un modo per evitare che è di individuare tutte le risorse in una DLL separata, talvolta definita DLL satellite.Questa DLL viene caricata in modo dinamico in fase di esecuzione e le risorse vengono caricate da tale DLL anziché dal form principale in tutto il codice.MFC supporta direttamente questo approccio.Si consideri un'applicazione denominata MYAPP.EXE; potrebbe disporre di tutte le risorse contenute in una DLL denominato MYRES.DLL.In InitInstance dell'applicazione in quanto segue per caricare la DLL e per impostare MFC in modo che caricare le risorse da tale percorso:

CMyApp::InitInstance()
{
   // one of the first things in the init code
   HINSTANCE hInst = LoadLibrary("myres.dll");
   if (hInst != NULL)
      AfxSetResourceHandle(hInst);

   // other initialization code would follow
   .
   .
   .
}

Da quel momento in poi, MFC carica le risorse da tale DLL anziché da myapp.exe.Tutte le risorse, tuttavia, devono essere presenti in tale DLL; MFC non individuerà l'istanza dell'applicazione a una risorsa specificata.Questa tecnica viene applicata in modo equivalente alle DLL regolari nonché ai controlli OLE.Il programma di installazione copierebbe la versione appropriata di MYRES.DLL a seconda delle impostazioni locali di risorse l'utente avrà gradito.

È relativamente semplice creare una DLL di sole risorse.Creare un progetto DLL, si aggiunge il file RC a e aggiungere le risorse necessarie.Se si dispone di un progetto esistente che non utilizza questa tecnica, è possibile copiare risorse dal progetto.Dopo aver aggiunto il file di risorse al progetto, è possibile di compilare il progetto.L'unica operazione da eseguire è impostata le opzioni del linker importare /NOENTRY.Ciò indica al linker che la DLL non dispone di punto di ingresso – poiché non dispone di codice, non ha un punto di ingresso.

[!NOTA]

L'editor di risorse in Visual C++ 4,0 e linguaggi supporta più successivi per file RC.Ciò può risultare molto semplice gestire la localizzazione in un singolo progetto.Le risorse per ogni linguaggio sono controllate le direttive per il preprocessore generate dall'editor di risorse.

Utilizzo delle risorse localizzate MFC fornisce

Qualsiasi applicazione MFC con la compilazione di riutilizzazioni due elementi da MFC: codice e risorse.Ovvero MFC dispone di diversi messaggi di errore, finestre di dialogo incorporate e di altri metodi utilizzati dalle classi MFC.Per completamente localizzare l'applicazione, è necessario localizzare non solo le risorse dell'applicazione, ma anche le risorse che derivano direttamente da MFC.MFC fornisce una serie di diversi file di risorse della lingua automaticamente, in modo che se il linguaggio di destinazione è già uno dei supporti di linguaggi MFC, è solo necessario assicurarsi di utilizzare tali risorse localizzate.

A partire da questi scrittura, MFC supporta cinese, tedesco, Spagnolo, francese che, italiano, giapponese e Coreano.I file che contengono queste versioni localizzate sono nelle directory INCLUDONO \ MFC \ L.* (“L„ corrisponde a localizzato a).I file tedeschi sono in MFC \ in INCLUDONO IN \ L.DEU, ad esempio.Per determinare l'applicazione per utilizzare questi file RC anziché i file che si trovano in MFC \ INCLUDES, aggiungere /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU alla riga di comando RC (si tratta di un campione, è necessario sostituire le impostazioni locali della scelta nonché la directory in cui è stato installato Visual C++).

Le istruzioni sopra funzioneranno se i si collega in modo statico con MFC.La maggior parte delle applicazioni si collegano dinamicamente (fatto che è l'impostazione predefinita di AppWizard).In questo scenario, non solo il codice è collegata – pertanto sono le risorse.Di conseguenza, è possibile localizzare le risorse dell'applicazione, ma le risorse di implementazione MFC continueranno a essere caricati dal MFC7x.DLL o una versione successiva) o da MFC7xLOC.DLL se esiste.È possibile avvicinarti a questo da due angoli diversi.

L'approccio più complesso è fornire uno di MFC7xLOC.DLLs localizzato (come MFC7xDEU, per il tedesco, MFC7xESP.DLL per lo Spagnolo, e così via.), o una versione successiva e installa il MFC7xLOC.DLL appropriato nella directory di sistema quando l'utente installa l'applicazione.Ciò può risultare molto complessa sia per lo sviluppatore che l'utente finale e come tali non è consigliato.Vedere nota tecnica 56 per ulteriori informazioni su questa tecnica e i relativi raccomandazioni.

Il modo più semplice e più sicuro è includere risorse localizzate MFC nell'applicazione o DLL stessa (o il relativo DLL satellite se si utilizza uno).In questo modo si eviteranno problemi di installazione MFC7xLOC.DLL correttamente.A tale scopo, si seguono le stesse istruzioni per il caso statico fornito in impostando la riga di comando RC correttamente il punto alle risorse localizzate), tranne per il fatto che è necessario rimuovere anche /D_AFXDLL definite che è stato aggiunto da AppWizard.Quando /D_AFXDLL è definito, AFXRES.H (e gli altri file MFC finale candidata) non definiscono alcune risorse (perché verrà effettuato il modello da DLL MFC anziché).

Vedere anche

Altre risorse

Note tecniche del numero

Note tecniche per categoria