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. AfxMessageBox nutzen. 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 ldStringById

    2. 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... 😉


Anmelden zum Antworten