Thread und Zeiger auf C..Doc
-
Du hast den Kommentar hinter der Cast-Zeile übersehen (und richtig heißt der Aufruf auch
CString* buffer = static_cast<CString*>(lparam);
-
hallo,
dann bekomm ich den fehler:
Fehler 4 error C2440: 'static_cast': 'LPARAM' kann nicht in 'CString *' konvertiert werdenoder muss ich das sonst noch irgendwo angeben das ich da nun ne string übergeb..
hab dieses WPARAM und LPARAM nich so ganz verstanden

-
Was genau hast du denn eigentlich per SendMessage() rausgeschickt?
-
so wird es aufgerufen:
CString hmmm("zu übertragen"); SendMessage(hwnd_main,FunktionXYZ, (WPARAM)0 , (LPARAM)&hmmm);dann:
LRESULT CEmpfaengerDlg::OnFunktionBlubMessage(WPARAM wparam, LPARAM lparam) { CString* buffer = static_cast<CString*>(lparam); ...einen int wert kann ich übertragen..
-
Du kannst keinen CString per SendMessage übertragen (zumindest nicht so wie Du es gemacht hast!).
Das CString object ist schon längst wieder ungültig, wenn es der Empfänger bekommt.Per SendMessage kannst Du eigentlich nur Zahlen übertragen (und natürlich den Spezialfall von Zahlen: nämlich Zeiger). Nur der Zeiger muss auf der Empfängerseite natürlich noch gültig sein!
Also z.B.:
LPTSTR szStr = _tcsdup(_T("mein String")); SendMessage(..... (LPWARAM) szStr);und auf der Empfängerseite:
LRESULT CEmpfaengerDlg::OnFunktionBlubMessage(WPARAM wparam, LPARAM lparam) { LPTSTR szStr = (LPTSTR) lparam; // ... free(szStr); }
-
ui!
was ist denn das shcon wieder

also ein zeiger auf einen string..
aber was unterscheidet den zeiger zu normalen?ich schätz mal es hat was mit der gültigkeit zu tun, wenn du das schon ansprichst

oder wird das wo anders gespeichert?
wo werden denn überhaupt meine variablen gespeichert?
-
@Jochen Kalmbach
Will Dir ja nur ungern wiedersprechen, aber das Senden eines CString´s über SendMessage ist durchaus möglich und eigentlich gefahrlos, da bei SendMessage auf die Rückkehr aus der MessageFunktion gewartet wird, da man ja einen Rückgabeparameter hat, also auch der lokale CString der auf dem Stack generiert wurde übergeben werden kann. Im Gegensatz zu PostMessage da sollte man so etwas nicht machen. Aber vielleicht kannst Du mich ja eines besseren belehren.
MFG Matthias
-
CTecS schrieb:
@Jochen Kalmbach
Will Dir ja nur ungern wiedersprechen, aber das Senden eines CString´s über SendMessage ist durchaus möglich und eigentlich gefahrlos, da bei SendMessage auf die Rückkehr aus der MessageFunktion gewartet wird,
Upps... da hab ich doch klatt was vergessen... danke!
-
und wie geht das dann?

-
So in etwa: (ACHTUNG mein Casten muß nicht unbedingt stimmen)
CString buffer("dieser Text soll übertragen werden"); SendMessage(DlgHandle,FunktionXYZ,0,(LPARAM)&buffer);LRESULT CMyDialog::OnFunktionXYZ(WPARAM /*Type*/, LPARAM lparam) { CString *buffer = (CString*)lparam; //hab das jetzt mit dem casten nicht ausprobiert ob das so stimmt //buffer ist der Zeiger auf deinen CString if(!buffer) return 0L;//kein gültiger Zeiger ...//mach was return 0L; }Hoffe das ich das jetzt richtig zusammen habe.
Gruß Matthias