Cette note décrit certains des dessins et des procédures, que vous pouvez utiliser pour localiser votre composant, que ce soit une application ou un contrôle OLE ou une DLL qui utilise MFC.
Vue d'ensemble
Il y a vraiment deux problèmes à résoudre lors de la localisation d'un composant qui utilise MFC. Tout d'abord, vous devez localiser vos propres ressources – cordes, boîtes de dialogue et d'autres ressources qui sont spécifiques à votre composant. La plupart des composants construits à l'aide de MFC aussi comprennent et utilisent un certain nombre de ressources qui sont définis par les MFC. Vous devez fournir ainsi des ressources MFC localisées. Heureusement, plusieurs langues sont déjà fournies par MFC elle-même.
En outre, votre composant doit être prêt à fonctionner dans son environnement cible (européen ou DBCS environnement activé). Pour l'essentiel, cela dépend de votre application de traitement de caractères avec le bit élevé défini correctement et de manipulation de chaînes de caractères double octet. MFC est activé, par défaut, pour les deux de ces milieux, tel qu'il est possible d'avoir un fichier binaire unique « monde entier » est utilisé sur toutes les plateformes avec juste différentes ressources branchés au moment de l'installation.
Localisation de ressources de votre composant
Localisation de votre application ou DLL devrait impliquer simplement remplacer les ressources avec des ressources qui correspondent à la langue cible. Pour vos propres ressources, c'est relativement simple : modifier les ressources de l'éditeur de ressources et de générer votre application. Si votre code est écrit correctement il n'y n'aura aucune chaînes ou le texte que vous souhaitez localiser codés en dur dans votre code source C++ – tous les localisation peut se faire en modifiant simplement les ressources. En fait, vous pouvez implémenter votre composant tel que tous les fournir une version localisée n'implique pas même une construction de code d'origine. C'est plus complexe, mais vaut bien et le mécanisme choisi pour MFC elle-même. Il est également possible de localiser une application en chargeant le fichier EXE ou DLL dans l'éditeur de ressources et en modifiant les ressources directement. Alors que cela est possible, qu'il est exige l'application de ces modifications chaque fois que vous générez une nouvelle version de votre application.
Une façon d'éviter cela est de localiser toutes les ressources dans une DLL distincte, appelée parfois un DLL satellite. Cette DLL est ensuite chargée de manière dynamique au moment de l'exécution et les ressources sont chargées de cette DLL au lieu de partir du module principal avec tout votre code. MFC prend directement en charge de cette approche. Considérons une application appelée MYAPP.EXE ; elle pourrait avoir toutes ses ressources dans une DLL appelée MYRES.DLL. pour l'application s InitInstance , il pourrait effectuer ce qui suit pour charger la DLL et causer des MFC pour charger les ressources à partir de cet emplacement:
CMyApp::InitInstance()
{
/ / une des premières choses que dans le code init
HINSTANCE hInst = LoadLibrary("myres.dll") ;
Si (hInst! = NULL)
AfxSetResourceHandle(hInst) ;
/ / le code d'initialisation autre suivraient
.
.
.
}
Dès lors, MFC se chargera des ressources de cette DLL au lieu de partir de myapp.exe. Toutes les ressources, toutefois, doivent être présents dans cette DLL – MFC ne recherchera instance de l'application à la recherche d'une ressource donnée. Cette technique s'applique aussi bien à régulière dll ainsi que les contrôles OLE. Votre programme d'installation pourrait copier la version appropriée de MYRES.DLL selon les paramètres régionaux de ressources l'utilisateur voudrais.
Il est relativement facile de créer une ressource uniquement DLL. Vous créez un projet DLL, ajoutez votre.RC ce fichier et ajouter les ressources nécessaires. Si vous avez un projet existant qui n'utilise pas cette technique, vous pouvez copier les ressources de ce projet. Après avoir ajouté le fichier de ressources au projet, vous êtes presque prêt à la construction du projet. La seule chose que vous devez faire est de définir des options pour inclure /NOENTRYde l'éditeur de liens. Cela indique à l'éditeur de liens que la DLL n'a aucun point d'entrée – puisqu'elle n'a pas de code, il n'a aucun point d'entrée.
&Notenbsp ; L'éditeur de ressources Visual C++ 4.0 ou version ultérieure prend en charge plusieurs langues par.Fichier RC. Ceci peut rendre très facile de gérer votre localisation dans un seul projet. Les ressources pour chaque langue est contrôlée par les directives du préprocesseur générées par l'éditeur de ressources.
À l'aide de MFC fourni localisée des ressources
N'importe quelle application MFC que vous générez réutilise deux choses de MFC : code et ressources. C'est, MFC a divers messages d'erreur, les boîtes de dialogue intégrées et d'autres ressources qui sont utilisées par les classes MFC. Pour tout localiser votre application, vous devez localiser non seulement des ressources de votre application, mais aussi des ressources qui proviennent directement de la MFC. MFC fournit un certain nombre de mots différents fichiers de ressources automatiquement, afin que si la langue que vous ciblez est une des langues de que MFC prend déjà en charge, vous devez juste vous assurer que vous utilisez ces ressources localisées.
De cette rédaction prend en charge les MFC : chinois, allemand, espagnol, français, italien, japonais et coréen. Les fichiers qui contiennent ces versions localisées sont dans le MFC\INCLUDE\L.* (le « L » signifie pour localisé) répertoires. Les fichiers allemands sont dans MFC\INCLUDE\L.DEU, par exemple. Ajoutez simplement à cause de votre application pour utiliser ces fichiers RC au lieu des fichiers situés dans MFC\INCLUDE, un /IC:\PROGRAM FILES\DEVSTUDIO\VC\MFC\INCLUDE\L.DEU à votre ligne de commande RC (c'est juste un exemple : vous devez remplacer vos paramètres régionaux de choix ainsi que le répertoire dans lequel vous avez installé Visual C++).
Les instructions ci-dessus fonctionneront si votre application est liée statiquement avec MFC. La plupart des applications lier dynamiquement (parce que c'est la valeur par défaut de AppWizard). Dans ce scénario, non seulement le code est dynamiquement liée – ce sont les ressources. Par conséquent, vous pouvez localiser vos ressources dans votre application, mais les ressources d'application MFC seront toujours chargés de la MFC4x.DLL (ou une version ultérieure) ou de MFC4xLOC.DLL si elle existe. Vous pouvez l'approche sous deux angles différents.
Fo&nctionnalité uniquement Professional et Enterprise Editionsnbsp ; Liaison statique aux MFC est pris en charge uniquement dans Visual C++ Professional et Enterprise Editions. Pour plus d'informations, voir Éditions de Visual C++.
L'approche plus complexe est de navire de la MFC4xLOC.DLLs localisés (tels que MFC4xDEU, pour l'allemand, MFC4xESP.DLL espagnol, etc.), ou une version ultérieure et installer le MFC4xLOC.DLL approprié dans le répertoire système lorsque l'utilisateur installe votre application. Cela peut être très complexe pour le développeur et l'utilisateur final et comme tel n'est pas recommandé. Consultez Technical Note 56 pour plus d'informations sur cette technique et ses mises en garde.
L'approche plus simple et la plus sûre consiste à inclure les ressources MFC localisées dans votre application ou la DLL elle-même (ou la DLL satellite) si vous utilisez un. Cela évite les problèmes d'installation de MFC4xLOC.DLL correctement. Pour ce faire, suivez les mêmes instructions pour le cas statique donnée ci-dessus (définition de la ligne de commande RC correctement pour pointer vers les ressources localisées), sauf que vous devez également supprimer les /D_AFXDLL définir qui a été ajouté par AppWizard. Lorsque /D_AFXDLL est défini, AFXRES.H (et les autres fichiers MFC RC) ne définissent en réalité toutes les ressources (parce qu'ils vont être plutôt extraite de DLL MFC).
&Notes techniques par le numéro |nbsp ; Notes techniques par catégorie