TN057: Lokalisierung von MFC-Komponenten

Diese Applikationsschrift beschreibt einige der Entwürfe und Verfahren, die Sie verwenden können, um Ihre Komponente zu lokalisieren, sei es eine Anwendung oder ein OLE-Steuerelement oder eine DLL, die MFC verwendet.

Übersicht

Es gibt wirklich zwei Probleme zu lösen, wenn eine Komponente zu lokalisieren, die MFC verwendet. Zunächst einmal müssen Sie Ihre eigenen Ressourcen – Zeichenfolgen, Dialogfelder und andere Ressourcen, die für die Komponente spezifisch sind lokalisieren. Die meisten Komponenten gebaut, unter Verwendung von MFC auch enthalten und verwenden eine Reihe von Ressourcen, die von MFC definiert sind. Sie müssen auch lokalisierte MFC-Ressourcen bereitstellen. Glücklicherweise werden mehrere Sprachen bereits von MFC selbst bereitgestellt.

Darüber hinaus die Komponente sollte bereit sein in die Zielumgebung ausgeführt (Europäische oder DBCS aktiviert Umwelt). Dies hängt zum größten Teil Ihre Anwendung Behandlung von Zeichen mit der high-Bit-Satz korrekt und Behandlung von Zeichenfolgen mit double-Byte-Zeichen. MFC ist standardmäßig für beide Umgebungen, aktiviert, so dass es möglich kaum, einen einzigen "World wide" Binary zu haben, die auf allen Plattformen mit nur verschiedene Ressourcen zur Rüstzeit angeschlossen wird.

Lokalisieren von Ressourcen der Komponente

Lokalisierung der Anwendung oder DLL sollte eine einfach anstelle der Ressourcen mit Ressourcen, die der Zielsprache entsprechen. Für Ihre eigenen Ressourcen, dies ist relativ einfach: die Ressourcen im Ressourcen-Editor bearbeiten und erstellen Sie die Anwendung. Wenn Ihr Code richtig geschrieben ist, es werden keine Zeichenfolgen oder Text, die Sie zu lokalisieren hartcodierte in den C++-Quellcode möchten – alle Lokalisierung erfolgt durch einfache Änderung Ressourcen. In der Tat, können Sie Ihre Komponente implementieren, so dass alle Bereitstellen einer lokalisierten Version nicht sogar einen Build des ursprünglichen Codes. Dies ist komplexer, aber es lohnt und ist der Mechanismus für MFC selbst gewählt. Es ist auch möglich, eine Anwendung zu lokalisieren, indem die exe- oder DLL-Datei in der Ressourcen-Editor laden und Bearbeiten von Ressourcen direkt. Während dies ist möglich, es erfordert Wiederanwendung dieser Änderungen jedes Mal erstellen Sie eine neue Version der Anwendung.

Eine Möglichkeit, dies zu vermeiden ist es, alle Ressourcen in einer separaten DLL, manchmal genannt eine Satelliten-DLL zu suchen. Diese DLL wird dann dynamisch zur Laufzeit geladen und die Ressourcen werden aus dieser DLL anstelle von das Hauptmodul mit Ihrem Code geladen. MFC unterstützt diesen Ansatz. Betrachten Sie eine Anwendung namens MYAPP.EXE; Es hätte alle seine Ressourcen in einer DLL mit dem MYRES.DLL. In der Anwendung InitInstance es würde führen Sie folgendermaßen vor, um die DLL laden und dazu führen, dass MFC Ressourcen von diesem Speicherort geladen ist:

CMyApp::InitInstance()
{
/ / eine der ersten Dinge in der Init-Code
HINSTANCE hInst = LoadLibrary("myres.dll");
Wenn (hInst! = NULL)
AfxSetResourceHandle(hInst);

/ / andere Initialisierungscode würden folgen
.
.
.
}

Von dann an, lädt MFC Ressourcen aus dieser DLL anstelle von myapp.exe. Alle Ressourcen, müssen jedoch vorhanden sein, dass MFC nicht die Application-Instanz auf der Suche nach einer bestimmten Ressource DLL suchen. Diese Technik gilt gleichermaßen gut zu regulären DLLs sowie OLE-Steuerelemente. Das Setup-Programm würde die entsprechende Version von MYRES kopieren.Je nach Gebietsschema welche Ressource DLL möchte der Benutzer.

Es ist relativ einfach, erstellen eine Ressource nur DLL. Sie erstellen ein DLL-Projekt, fügen Ihre.RC Datei zu, und fügen Sie die erforderlichen Ressourcen. Wenn Sie ein vorhandenes Projekt, das diese Technik nicht verwendet haben, können Sie die Ressourcen aus dem betreffenden Projekt kopieren. Nach dem Hinzufügen der Ressourcendatei für das Projekt sind Sie fast bereit, das Projekt zu erstellen. Das einzige was, das Sie tun müssen, ist der Linker Optionen gehören/NOENTRYgesetzt. Dies weist den Linker, dass die DLL ohne Einstiegspunkt – hat da es keinen Code hat, hat es keinen Einstiegspunkt.

Hinweis&Nbsp;  Der Ressourcen-Editor in Visual C++ 4.0 und höher unterstützt mehrere Sprachen pro.RC-Datei. Diese machen es sehr einfach, Ihre Lokalisierung in einem einzigen Projekt zu verwalten. Die Ressourcen für jede Sprache wird gesteuert von Präprozessordirektiven durch den Ressourcen-Editor generiert.

Mithilfe der bereitgestellten MFC-lokalisierte Ressourcen

Jede MFC-Anwendung, die Sie erstellen zwei Dinge von MFC Distributionskanäle: Code und Ressourcen. Das heißt, hat MFC verschiedene Fehlermeldungen, integrierte Dialogfelder und andere Ressourcen, die von der MFC-Klassen verwendet werden. Um die Anwendung vollständig zu lokalisieren, müssen Sie nicht nur die Ressourcen der Anwendung, sondern auch die Mittel, die direkt von MFC kommen zu lokalisieren. MFC bietet eine Reihe von anderen Sprache Ressourcendateien automatisch, so dass wenn die Sprache, die Sie Zielen eine der Sprachen, die MFC bereits unterstützt ist, Sie müssen nur sicherstellen, dass Sie die lokalisierten Ressourcen verwenden.

Dieses Schreibens MFC unterstützt: Chinesisch, Deutsch, Spanisch, Französisch, Italienisch, Japanisch und Koreanisch. Die Dateien, die diese lokalisierten Versionen enthalten sind in der MFC\INCLUDE\L.* (die "L" steht für lokalisierte) Verzeichnisse. Die deutschsprachigen Dateien sind im MFC\INCLUDE\L.DEU, zum Beispiel. Um zu Ihrer Anwendung zur Verwendung von RC-Dateien anstatt die Dateien in MFC\INCLUDE, fügen Sie einfach eine /IC:\PROGRAM FILES\DEVSTUDIO\VC\MFC\INCLUDE\L.DEU , die RC-Befehlszeile (Dies ist nur ein Beispiel-Sie brauchen, um Ihr Gebietsschema der Wahl sowie das Verzeichnis, in dem Sie Visual C++ installiert, ersetzen).

Die oben genannten Anweisungen werden funktionieren, wenn Ihre Anwendung statisch mit MFC verknüpft. Die meisten Anwendungen verknüpfen dynamisch (weil das AppWizard Standard ist). In diesem Szenario ist nicht nur der Code dynamisch verknüpft – so sind die Ressourcen. Infolgedessen können Sie Ihre Ressourcen in Ihrer Anwendung zu lokalisieren, aber die MFC-Implementierung-Ressourcen noch geladen werden von der MFC4x.DLL (oder höher) oder von MFC4xLOC.DLL wenn es vorhanden ist. Sie können diesen Ansatz aus zwei verschiedenen Blickwinkeln.

Funktion nur in der Professional Edition und Enterprise Edition&Nbsp;  Statische Verknüpfung mit MFC wird nur in Visual C++ Professional und Enterprise-Editionen unterstützt. Weitere Informationen finden Sie unter Visual C++-Editionen.

Der komplexere Ansatz soll Schiff einer der lokalisierten MFC4xLOC.DLLs (z. B. MFC4xDEU für Deutsch, MFC4xESP.DLL für Spanisch, etc.) oder eine höhere Version, und die entsprechenden MFC4xLOC.DLL in das Systemverzeichnis installieren, wenn der Benutzer die Anwendung installiert. Dies kann für den Entwickler und Endbenutzer sehr komplex sein und als solche wird nicht empfohlen. Finden Sie unter technischer Hinweis 56 für weitere Informationen über diese Technik und ihre Vorbehalte.

Die einfachste und sicherste Vorgehensweise soll die lokalisierten MFC-Ressourcen in Ihrer Anwendung oder DLL selbst (oder die Satelliten-DLL) enthalten, wenn Sie eine verwenden. Dies vermeidet die Probleme der MFC4xLOC.DLL richtig installieren. Um tun, folgen Sie die Anweisungen für den statischen Fall oben (Einstellen der RC Befehlszeile richtig darauf, die lokalisierten Ressourcen) gegeben, außer, dass Sie auch entfernen müssen die /D_AFXDLL definieren, die von AppWizard hinzugefügt wurde. Wenn /D_AFXDLL ist definiert, AFXRES.H (und den anderen MFC-RC-Dateien) definieren nicht wirklich alle Ressourcen (weil sie von der MFC-DLLs stattdessen gezogen werden).

Technische Hinweise von &Nummer |nbsp; Technische Hinweise nach Kategorie

Index