Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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;

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?

+.

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

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]

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

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?

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

}

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.