Zum Inhalt springen

LPCSTR und CString


bigpoint

Empfohlene Beiträge

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;

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

+.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 casten
Das wiederum brauchst du gar nicht. CString hat einen Konvertierungsoperator dafür.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ??

Link zu diesem Kommentar
Auf anderen Seiten teilen

"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);

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ??

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...