CStringW to LPCTSTR ?



  • Weiss jeemand wie ich diese konvertierung durchführen kann? Beim Google hab`ich nix gefunden... 😞


  • Mod

    Das kannnicht sein, dass Du dazu nichts gefunden hast. 50% aller Fragen drehen sich immer um TCHAR und Konsorten. CStringW ist ein Contaoner für wchar_t Daten. LPCTSTR ist je nach Projekt Typ entweder ein const char* oder const wchar_t*. Ist Dein Projekt also ein Unicode Projekt kannst Du direkt zuweisen.
    Ansonsten benutze die entsprechenden Makros entweder: W2T oder CW2T! Dies macht Dein Programm universell nutzbar egal ob Unicode oder nicht.



  • einfach der funktion die das LPCTSTR haben will str.GetString() geben


  • Mod

    Mr Evil schrieb:

    einfach der funktion die das LPCTSTR haben will str.GetString() geben

    Das geht nur in einem Unicode Projekt, CSTringW.GetStrng liefert einen LPCWSTR!



  • und ?

    er fragte nach einen LPCTSTR
    wenn sein projekt unicode ist, wird LPCWSTR gebraucht und wenns multibyte ist wird LPCSTR verwendet

    Unicode:
    LPCTSTR == LPCWSTR
    GetString == LPCWSTR

    Multibyte:
    LPCTSTR == LPCSTR
    GetString == LPCSTR

    passt doch

    nur wenn er LPCSTR in einen unicode projekt haben will muss mit WideCharToMultiByte convertiert werden und andersrum, aber fuer seine zwecke reicht GetString voellig da er typgleich bleibt



  • Mr Evil schrieb:

    und ?

    er fragte nach einen LPCTSTR
    wenn sein projekt unicode ist, wird LPCWSTR gebraucht und wenns multibyte ist wird LPCSTR verwendet

    Er fragte aber auch nach einem CStringW - und der arbeitet grundsätzlich mit LPCWSTR 😉


  • Mod

    [quote="CStollEr fragte aber auch nach einem CStringW - und der arbeitet grundsätzlich mit LPCWSTR ;)[/quote]

    Danke für die Klarstellung 🙂



  • Hi Jungs !

    Ich wollte natürlich nicht dass ihr wegen meine Frage euch in die Harre springt... 😉 aber jetzt Ehrlich - VIELEN DANK das die Antworten gekommen sind!

    Problem ist, das Typen wie ich, die diese Materie nie richtig studiert haben sondern sich dies selber beigebracht haben sehr oft Probleme haben so "kleine" Sache zu lösen. Deswegen war meine Bitte um vielleicht kleines Beispiel bzw. ein Link wo ich so etwas nachgucken kann 🙂

    Ich habe verschiedene Dinge ausprobiert (W2T, CW2T, CW2A, GetString() ect...) und jedes Mal ein dickes Fehlermeldung von Compiler bekommen und deswegen versuche ich noch mal meine Frage zu stellen.

    Also zu Sache:
    1. Die Anwendung ist MultiByte
    2. Hab in SQL SERVER 2005 viele Einträge über verschiedenes Hotel.
    3. Unter anderen ist "Beschreibung" – und hier fängt das Problem an. Die Beschreibungen sind auf Polnisch und haben viel nettes polnisches diakritisches Zeichen wie ZB. Ą ę ś ż usw.
    4. Es muss in eine Excel Tabelle geliefert werden, deswegen habe ich eine nette Class bei Codeprojekt gefunden http://www.codeproject.com/database/cspreadsheet.asp
    5. Diese habe ich getestet und funktioniert „leicht und schmerzlos“
    6. Aber jetzt kommt`s: um eine Zeile (Row) in Excel-Arbeitsmappe rein zu schreiben brauche ich eine Variable Klasse CStringArray() die wiederrum bei Funktion Add akzeptiert 2 Typen von Variablen CString oder LPCTSTR

    Und jetzt 1 Beispiel:

    CStringArray sRecordsTable;
    
        // Lese Daten von Datenbank
    	m_pRecordsetHotel.Open();
    	m_pRecordsetHotel.MoveFirst();
    	do
    	{
    	    sRecordsTable.Add(m_pRecordsetHotel.m_Bezeichnung);
    
            m_pRecordsetHotel.MoveNext();
    	}while(!m_pRecordsetHotel.IsEOF());
    	m_pRecordsetHotel.Close();
    

    und dann Fehler: Konvertierung des Parameters 1 von 'CStringW' in 'LPCTSTR' nicht möglich.... klar recordset liefert CStringW nicht CString!

    Nächstes versucht kasten zur CString:

    CStringArray sRecordsTable;
    
        // Lese Daten von Datenbank
    	m_pRecordsetHotel.Open();
    	m_pRecordsetHotel.MoveFirst();
    	do
    	{
    	    sRecordsTable.Add((CString)m_pRecordsetHotel.m_Bezeichnung);
    
    	    m_pRecordsetHotel.MoveNext();
    	}while(!m_pRecordsetHotel.IsEOF());
    	m_pRecordsetHotel.Close();
    

    hmmm... funktioniert, ABER verschluck mir alle unsere tolle "ą ę ć" usw. und macht daraus "a e c"
    Deswegen bleibt nur letzte Hoffnung LPCTSTR…. Aber wie ? 😕

    CStringArray sRecordsTable;
        LPCTSTR conwertString;
    
        // Lese Daten von Datenbank
    	m_pRecordsetHotel.Open();
    	m_pRecordsetHotel.MoveFirst();
    	do
    	{
    
              conwertString = // ??? wie kann ich dies konwertieren von "m_pRecordsetHotel.m_Bezeichnung"  ohne die diakritische Buchtaben zu verliern ???
              sRecordsTable.Add(conwertString);
    
    	    m_pRecordsetHotel.MoveNext();
    	}while(!m_pRecordsetHotel.IsEOF());
    	m_pRecordsetHotel.Close();
    

    tjjjjaa... Sicher ist dies für "Vollblütige" einfache Sache… aber für mich nicht!

    Deswegen gleich vielen DANK for HELP
    Adam

    PS. Sorry für mein schlechtes Deutsch !


  • Mod

    CString nimmt kein CStringW und bei der Konvertierung gehen in jedem Fall die Sonderzeichen verloren. Du müsstest also Deine Helferklassen auf CStringW umstellen, oder das gaze Projekt auf Unicode.

    Vergiss einfach mit CString herumzumachen und dann noch irgendwie es zu schaffen alle Zeichne zu erhalten...

    Wenn Du Probleme mit den W2T etc. Makros hast, dann sag uns bitte welche.
    Die Verwendungist so elementar Simpel, dass ich dies nicht verstehen kann.


  • Mod

    Meine Aussage, dass ein CString keinen CStringW aktzepiert war ungenau. CString ist in Unicode Projekten ja identisch mit CStringW!

    Es ging mir hier um den Verlust der speziellen Zeichen.


Anmelden zum Antworten