bigpoint Geschrieben 18. Juni 2004 Geschrieben 18. Juni 2004 Hallo, wie kriege ich sowas: LPCSTR pstr = "test\0" "ste\0" "sst\0" "ende"; [/PHP] aus mehreren CStrings heraus, denn so geht es doch nicht [PHP] CString str,test,ste,sst,ende; test="test";ste="ste";sst="sst";ende="ende"; str.Format("%s%s%s%s",test,ste,sst,ende); LPCSTR lps = (LPCSTR) str;
Honkytonk Geschrieben 18. Juni 2004 Geschrieben 18. Juni 2004 Hallo, wie kriege ich sowas: LPCSTR pstr = "test\0" "ste\0" "sst\0" "ende"; [/PHP] aus mehreren CStrings heraus, denn so geht es doch nicht [PHP] CString str,test,ste,sst,ende; test="test";ste="ste";sst="sst";ende="ende"; str.Format("%s%s%s%s",test,ste,sst,ende); LPCSTR lps = (LPCSTR) str; Du möchtest also die CStrings zusammenfügen? +.
bigpoint Geschrieben 18. Juni 2004 Autor Geschrieben 18. Juni 2004 Du möchtest also die CStrings zusammenfügen? +. nein das tue ich schon beriets , ich will die richtig in LPCSTR casten
Klotzkopp Geschrieben 18. Juni 2004 Geschrieben 18. Juni 2004 nein das tue ich schon beriets , Nein, eigentlich nicht. Die Nullzeichen zwischen den Teilstrings bekommst du mit Format nicht rein. CString str; LPSTR p = str.GetBuffer(17); memcpy(p, "test\0ste\0sst\0ende", 17); str.ReleaseBuffer(17);[/CODE] ich will die richtig in LPCSTR castenDas wiederum brauchst du gar nicht. CString hat einen Konvertierungsoperator dafür.
bigpoint Geschrieben 21. Juni 2004 Autor Geschrieben 21. Juni 2004 ja hmm... das Problem ist das ich es: "test\0ste\0sst\0ende", als einzelne CStrings bekomme etwa so: CString str,test,ste,sst,ende; test="test";ste="ste";sst="sst";ende="ende"; jetzt habe ich es so versucht klappt aber nicht CString str,test,ste,sst,ende; test="test";ste="ste";sst="sst";ende="ende"; str = test+"\\0"+ste+"\\0"+sst+"\\0"+ende; LPSTR p = str.GetBuffer(17); memcpy(p, str, 17); str.ReleaseBuffer(17);
Klotzkopp Geschrieben 21. Juni 2004 Geschrieben 21. Juni 2004 Du kannst keine der CString-Funktionen benutzen, wenn du so etwas machen willst. Das schließt auch den operator+ ein. Folgendes funktioniert: CString str,test,ste,sst,ende; test="test";ste="ste";sst="sst";ende="ende"; LPSTR p = str.GetBuffer(17); memset(p, 0, 17); memcpy(p, test, test.GetLength()); p += test.GetLength() + 1; memcpy(p, ste, ste.GetLength()); p += ste.GetLength() + 1; memcpy(p, sst, sst.GetLength()); p += sst.GetLength() + 1; memcpy(p, ende, ende.GetLength()); str.ReleaseBuffer(17); [/CODE]
bigpoint Geschrieben 21. Juni 2004 Autor Geschrieben 21. Juni 2004 CString str,test,ste,sst,ende; test="test";ste="ste";sst="sst";ende="ende"; LPSTR p = str.GetBuffer(17); memset(p, 0, 17); memcpy(p, test, test.GetLength()); p += test.GetLength() + 1; memcpy(p, ste, ste.GetLength()); p += ste.GetLength() + 1; memcpy(p, sst, sst.GetLength()); p += sst.GetLength() + 1; memcpy(p, ende, ende.GetLength()); str.ReleaseBuffer(17); jetzt will ich das ganze in eine Funktion schreiben, als rückgabe wert dachte ich mir CString der zurück mir str.ReleaseBuffer(17); liefert geht aber nicht. Was muss die Funktion dan zurück liefern ??
Klotzkopp Geschrieben 21. Juni 2004 Geschrieben 21. Juni 2004 jetzt will ich das ganze in eine Funktion schreiben, als rückgabe wert dachte ich mir CString der zurück mir str.ReleaseBuffer(17); liefert geht aber nicht. "Geht nicht" ist keine ausreichende Fehlerbeschreibung. Was bedeutet "geht nicht"? Wie sieht dein Code aus?
bigpoint Geschrieben 21. Juni 2004 Autor Geschrieben 21. Juni 2004 "Geht nicht" ist keine ausreichende Fehlerbeschreibung. Was bedeutet "geht nicht"? Wie sieht dein Code aus? ja stimmt, also Fehler: error C2664: '__thiscall CString::CString(const class CString &)' : Konvertierung des Parameters 1 von 'void' in 'const class CString &' nicht moeglich.Ausdruck vom Typ void kann nicht in andere Typen konvertiert werden. Funktion CString lalala::CString2LPSTR(CString test,CString ste,CString sst) { CString str; LPSTR p = str.GetBuffer(17); memset(p, 0, 17); memcpy(p, test, test.GetLength()); p += test.GetLength() + 1; memcpy(p, ste, ste.GetLength()); p += ste.GetLength() + 1; memcpy(p, sst, sst.GetLength()); p += sst.GetLength() + 1; memcpy(p,"ende",17); return sAttributes_gfs.ReleaseBuffer(17); }
Klotzkopp Geschrieben 21. Juni 2004 Geschrieben 21. Juni 2004 ReleaseBuffer ist void, gibt also nichts zurück. return str; sollte schon reichen. Die 17 musst du erst ausrechnen, falls die Strings test, ste und sst keine feste Länge haben (Länge von test + Länge von ste + Länge von sst + Länge von "ende" + 3 für die drei Nullzeichen dazwischen).
bigpoint Geschrieben 22. Juni 2004 Autor Geschrieben 22. Juni 2004 ich kann nicht mehr die Funktion sieht jetzt so aus: CString lala::CString2LPSTR(CString sdsn,CString server,CString sdatabase) { CString str; int buffer = sdsn.GetLength()+server.GetLength()+sdatabase.GetLength()+24; LPSTR pSAttributes = str.GetBuffer(buffer); memset(pSAttributes, 0, buffer); memcpy(pSAttributes, sdsn, sdsn.GetLength()); pSAttributes += sdsn.GetLength() + 1; memcpy(pSAttributes, server, server.GetLength()); pSAttributes += server.GetLength() + 1; memcpy(pSAttributes, sdatabase, sdatabase.GetLength()); pSAttributes += sdatabase.GetLength() + 1; memcpy(pSAttributes,"Trusted_Connection=1.",buffer); str.ReleaseBuffer(buffer); return str; } [/PHP] jetzt wenn ich sie nur so aufrufe : [code] try { CString str; str=CString2LPSTR("DSN=myDSN","SERVER=mySer","DATABASE=myDB"); }catch( CException * e ) { TCHAR szCause[255]; CString strFormatted; e->GetErrorMessage(szCause, 255); } [/code] krieg beim catch( CException * e ) Fehler: [b] Benutzerdefinierter Haltepunkt aus Quellcode aufgerufen bei 0x778813b1 [/b] Warum ??
Klotzkopp Geschrieben 22. Juni 2004 Geschrieben 22. Juni 2004 Mein Fehler, sorry memcpy(pSAttributes,"Trusted_Connection=1.",buffer); Hier darf als letzter Parameter nicht die Gesamtlänge, sondern nur die Länge des letzten Strings stehen, in deinem Fall also 21.
bigpoint Geschrieben 22. Juni 2004 Autor Geschrieben 22. Juni 2004 ....in deinem Fall also 21. und nicht 24 ??
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden