Loading Strings
-
Servus.
Beschäftige mich gerade mit StringTables.Hab mir nen kleines Beispiel gebastelt:
//...... CString sFirstString; sFirstString.LoadStringW(IDS_STRING112); CString sSecondString; sSecondString.LoadStringW(IDS_STRING111); MessageBox( sFirstString, sSecondString); //......Funktioniert auch.
Aber kann man das nicht irgendwie noch verkürzen?!Habs schon so probiert:
//...... CString sFirstString; MessageBox( sFirstString.LoadStringW(IDS_STRING112), sFirstString.LoadStringW(IDS_STRING111); //......Geht leider nicht.
Oder kann man das gar nicht verkürzen und ich muss zwei Cstring anlegen?! Aber das wäre ja auch wiederrum nicht Sinn der Stringtable richtig?^^
-
Sippel schrieb:
Geht leider nicht.
Oder kann man das gar nicht verkürzen und ich muss zwei Cstring anlegen?! Aber das wäre ja auch wiederrum nicht Sinn der Stringtable richtig?^^Du könntest z.B.
AfxMessageBoxnutzen. Die Funktion ist überladen und akzeptiert eine Resourcen-String-ID.Ansonsten ginge könntest Du es so machen
AfxMessageBox(CString(MAKEINTRESOURCE(IDS_STRING112)).GetString(), CString(MAKEINTRESOURCE(IDS_STRING111)).GetString());
-
in funktion auslagern?
CString loadStringID (int ID) { CString temp; return temp.LoadStringW(ID); }Dann kannst du es mit
MessageBox (loadStringID(IDS_STRING112),loadStringID(IDS_STRING111));aufrufen...
-
Lupo4u2 schrieb:
Dann kannst du es mit
MessageBox (loadStringID(IDS_STRING112),loadStringID(IDS_STRING111));aufrufen...
MessageBox( loadStringID(IDS_STRING112), loadStringID(IDS_STRING111));Error 2 error C3861: 'loadStringID': identifier not found
Kommt leider ein error.
-
hö?
wo hast du die Funktion loadStringID hingeschrieben, das er sie nicht findet?!? (vielleicht unter deine Funktion, welche loadStringID aufruft?!?)
-
Lupo4u2 schrieb:
hö?
wo hast du die Funktion loadStringID hingeschrieben, das er sie nicht findet?!? (vielleicht unter deine Funktion, welche loadStringID aufruft?!?)void LoadStringID();
genau da über?!
-
Nein, das hier alles:
CString loadStringID (int ID) { CString temp; return temp.LoadStringW(ID); }muss irgendwo über deiner Funktion stehen, die diese Messagebox (und somit auch unsere Funktion) aufruft.
Also irgendwie so:
CString loadStringID (int ID) { CString temp; return temp.LoadStringW(ID); } //deine Funktion anstelle von int main() fängt hier an int main() { // hier passiert irgendwas und dann wird die MessageBox aufgerufen MessageBox (loadStringID(IDS_STRING112),loadStringID(IDS_STRING111)); //...... }
-
Danke für deine Antwort aber wenn ich es so mache, bekomme ich wieder ein Error:
Error 2 error C2668: 'ATL::CStringT<BaseType,StringTraits>::CStringT' : ambiguous call to overloaded function
-
ah sorry,
anscheinend hab ich schon zu lange nichts mehr programmiert

und auch gerade nix hier um das nachzubauen, aber anscheinend gibts drei mögliche Fehlerquellen:1. es gibt schon eine Funktion namens loadStringID vordefiniert in der CString (was ich aber nicht glaube)
Behebung: benenn die loadStringID funktion einfach um. Z.b. in ldStringById2. du hast irgendwo in deinem Source code noch
void LoadStringID();stehen?
Wenn ja, dann bin ich böse!
3. die Funktion LoadStringW mag den int Datentyp nicht.
Behebung: Den datentyp des Übergabeparameter der Funktion in UINT ändern.Insgesamt müsste das dann in etwa so aussehen:
CString ldStringByID (UINT ID) { CString temp; return temp.LoadStringW(ID); } //deine Funktion anstelle von int main() fängt hier an int main() { // hier passiert irgendwas und dann wird die MessageBox aufgerufen MessageBox (ldStringByID(IDS_STRING112),loadStringID(IDS_STRING111)); //...... }hoffe das behebt alle Probleme...
