| |
|
|
- Seite 1 - |
|
Stephan Sonneborn | Hallo zusammen,
hat jemand von Euch Erfahrungen mit Multilanguage-DLLs? Ich habe in einem Programm das bisher mit komplett unterschiedlichen DLLs gelöst (also eine mit Texten in deutsch, eine in englisch, eine in ...) Das ist von der Verwaltung her sehr aufwendig. In den DLLs kann man ja eine Sprache mitgeben. Wie kann ich die dann im Programm zuordnen? Ich denke, das wird Windows automatisch machen: ein englisches Windows wird dann die englischen Texte lesen. Aber es gibt ja allein für englisch x verschiedene Spracheinstellungen, welche sollte man in die DLL stellen?
Kann man auch in einem deutschen Windows englische Texte verwenden? |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 04.10.2011 ▲ |
|
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
- Seite 2 - |
|
Andreas Miethe
| Das Umstellen auf eine andere Sprache ist eigentlich recht simpel. Danach ist das Laden der Resourcen immer gleich, egal welche Sprache.
Hier mal ein Beispiel (funktioniert nur auf NT-Systemen )
Download |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 15.10.2011 ▲ |
|
|
|
|
|
| |
|
- Seite 1 - |
|
Detlef Jagolski | Und ich dachte die Lösung von Andreas erklärt sich durch
The MAKELANGID macro is defined as follows:
#define MAKELANGID(p, s) ((((WORD) (s)) << 10) | (WORD) (p))
von alleine. |
|
|
| |
|
|
|
Stephan Sonneborn | Hallo Detlef, hallo Andreas, vielen Dank für Eure Hilfe, aber irgendwie stehe ich immer noch aufm Schlauch: Ich hab eine DLL gebastelt mit einer STRING-Resource in den Sprachcodes Neutral, GERMAN und ENGLISH.
In allen dreien habe ich Texte hinterlegt: 100,Neutral; 100,Deutsch; 100,English
Mittels KompilierenMarkierenSeparierenFindResourceEX(DllName&, ~RT_STRING, PointerAufID, MAKELANGID(~Neutral, ~SUBLANG_Neutral))
FindResourceEX(DllName&, ~RT_STRING, PointerAufID, MAKELANGID(~German, ~SUBLANG_German))
FindResourceEX(DllName&, ~RT_STRING, PointerAufID, MAKELANGID(~English, ~SUBLANG_English_US))
wollte ich dann auf die Texte zugreifen.Wie müsste denn der Pointer "PointerAufID" aussehen? |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 10.10.2011 ▲ |
|
|
|
| |
|
- Seite 2 - |
|
|
Detlef Jagolski | Aus der API Hilfe von FindResourceEX:
Points to a null-terminated string specifying the name of the resource. For more information, see the Remarks section.
KompilierenMarkierenSeparieren Gruß
Detlef |
|
|
| XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 11.10.2011 ▲ |
|
|
|
|
| Anstelle des Strings lieber die Resource-ID verwenden, also einfach die Zahl hinschreiben. Nachdem die Resource gefunden ist, ist noch LoadResource() und LockResource() nötig, dann steht im zurückgegebenen Speicher der Unicode(?? bin ich jetzt so ausm Kopf überfragt)-Text, allerdings als Text-Bank. mit bis zu 16 Strings oder so. Du musst also im Speicher noch die Position des richtigen Strings errechnen. Alles in allem also nicht so einfach. Was in der API fehlt ist sowas wie LoadString mit Language-Support, also ein LoadStringEx. Gibts aber leider nicht.
Darum empfehle ich schon fast, unterschiedliche ID's für Sprachentexte zu verwenden, z.B . ab 1000 für deutsche Texte, ab 2000 für englische usw. und dann normal mit XProfanfunktionen einzulesen. Ist auf jeden Fall einfacher, wenn auch nicht so... cool. |
|
|
| |
|
|
|
Stephan Sonneborn | Frabbing (11.10.11)
Darum empfehle ich schon fast, unterschiedliche ID's für Sprachentexte zu verwenden, z.B . ab 1000 für deutsche Texte, ab 2000 für englische usw. und dann normal mit XProfanfunktionen einzulesen. Ist auf jeden Fall einfacher, wenn auch nicht so... cool.
Frank, Du hast ja sooo Recht!!! KompilierenMarkierenSeparieren $H WINDOWS.PH
VAR CompanyDLL& = USEDLL("Test.dll")
DEF MakeLangID(2) (@&(2) << 10) | @&(1)
DEF FindResourceEx(4) !"kernel32.dll", "FindResourceExA"
DEF LoadResource(2) !"kernel32.dll", "LoadResource"
CLS
print EXTSTRING$(CompanyDLL&, 100)
print companydll&
var PointerAufID$ = "100" + Chr$(0)
print FindResourceEx(CompanyDLL&, ~RT_STRING, Addr(PointerAufID$), MAKELANGID(~LANG_GERMAN, ~SUBLANG_GERMAN))
print LoadResource(CompanyDll&, FindResourceEx(CompanyDLL&, ~RT_STRING, Addr(PointerAufID$), MAKELANGID(~LANG_GERMAN, ~SUBLANG_GERMAN)))
Waitinput
FREEDLL CompanyDll&
Dieser Code liefert mir immer nur eine 0 als Handle... |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 11.10.2011 ▲ |
|
|
|
|
Andreas Miethe
| Das Umstellen auf eine andere Sprache ist eigentlich recht simpel. Danach ist das Laden der Resourcen immer gleich, egal welche Sprache.
Hier mal ein Beispiel (funktioniert nur auf NT-Systemen )
Download |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 15.10.2011 ▲ |
|
|
|
|
Stephan Sonneborn | Der XProfan Doc hat wieder zugeschlagen!!!!
Danke Andreas!!!!
Es ist in der Tat recht simpel, wenn man weiß wies geht... |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 15.10.2011 ▲ |
|
|
|
|
E.T. | Super, Andreas !!! Da kann ich mir ja in Zukunft auch die "mehreren Dll's" sparen.
DANKE !!! |
|
|
| XProfan X2Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 15.10.2011 ▲ |
|
|
|
|
Julian Schmidt | Funktioniert das auch mit einer ganz normalen Exe anstatt einer DLL? Kann man diese Strings im Programm selbst Platzieren? Wenn ja fände ich das noch viel praktischer.
[OFFTOPIC]Im Themen-Titel ist ein Schreibfehler! Wenn jemand folglich nach "Multilanguage" sucht wird nichts gefunden. [/OFFTOPIC] |
|
|
| |
|
|
|
Andreas Miethe
| Julian57 (15.10.11)
Funktioniert das auch mit einer ganz normalen Exe anstatt einer DLL? Kann man diese Strings im Programm selbst Platzieren? Wenn ja fände ich das noch viel praktischer.
Klar, das geht mit einer Exe genauso wie mit einer Dll. |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 16.10.2011 ▲ |
|
|
|
|
|
Kann man diese Strings im Programm selbst Platzieren? Wenn ja fände ich das noch viel praktischer.
Der LemonEd kann das per RC oder RES-Datei einbauen, einfach den Scriptnamen in den Einstellungen zum Quellcode angeben. Download findest du auf meiner Seite oder bei Paule.
So eine RC würde dann so ähnlich aussehen:
LANGUAGE 0, SUBLANG_NEUTRAL STRINGTABLE { 1000, "Good morning" 1001, "How are you?" }
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN STRINGTABLE { 1000, "Guten Morgen" 1001, "Wie geht es dir?" }
|
|
|
| |
|
|
|
Stephan Sonneborn | Julian57 (15.10.11)
[OFFTOPIC]Im Themen-Titel ist ein Schreibfehler! Wenn jemand folglich nach "Multilanguage" sucht wird nichts gefunden. [/OFFTOPIC]
Danke für den Hinweis Julian, habs korrigiert. |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 16.10.2011 ▲ |
|
|
|