bigpoint Geschrieben 18. Juni 2004 Teilen 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 18. Juni 2004 Teilen 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? +. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 18. Juni 2004 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Juni 2004 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 21. Juni 2004 Autor Teilen 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); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Juni 2004 Teilen 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 21. Juni 2004 Autor Teilen 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 ?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Juni 2004 Teilen 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 21. Juni 2004 Autor Teilen 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); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Juni 2004 Teilen 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). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 22. Juni 2004 Autor Teilen 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 ?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Juni 2004 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 22. Juni 2004 Autor Teilen Geschrieben 22. Juni 2004 ....in deinem Fall also 21. und nicht 24 ?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.