Veröffentlicht 18. Juni 200421 j 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;
18. Juni 200421 j 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? +.
18. Juni 200421 j Autor Du möchtest also die CStrings zusammenfügen? +. nein das tue ich schon beriets , ich will die richtig in LPCSTR casten
18. Juni 200421 j 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.
21. Juni 200421 j Autor 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);
21. Juni 200421 j 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]
21. Juni 200421 j Autor 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 ??
21. Juni 200421 j 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?
21. Juni 200421 j Autor "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); }
21. Juni 200421 j 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).
22. Juni 200421 j Autor 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 ??
22. Juni 200421 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.