Pointer einer eigenen Klasse über Postmessage versenden
-
Hallo Jungs,
bin ein Neuling in VC++. Wie kann ich mit PostMessage einen Pointer einer eigenen Klasse in WPARAm oder LPARAM reinpacken und dann im fenster auf das die Message gesendet wurde wieder verwenden. hab noch nichts gutes gefunden.
Ist echt dringend.Danke,
Eddikonstantin
-
Aehm da unter windows LPARAM und WPARAM der Groesse eines ueblichen Zeigers entsprechen, solltest keine Probleme mit haben ...
CMyClass * pPtr = new CMyClass; WPARAM wparam = static_cast<WPARAM>(pPtr); // und irgendwo dann versenden ... SendMessage(...,...,wparam,...); // ... bedutet das da die richtigen parameter einsetzen sollst :-)Und irgendwo erhaeltst dann an nem anderen Fenster deine Message ...
LPMsg pmsg; if(GetMessage(pmsg,NULL,...,...)) { CMyClass * pPtr = static_cast<CMyClass *>(pmsg->wParam); }Wobei das aber nen ziemlich kritisches Problem ist .....
Wenn deine Nachricht verlorengeht, geht dein Zeiger aufn object auch verloren ... Solltest also deine Instanzen von den referenzierten Objecten irgendwo in nem zentralen container halten, wo sie dann auch zu nem definierten Zeitpunkt wieder zersteort werden, und dich nicht auf die Messages verlassen ... Also sicherstellen, das deine instanz noch exisitiert, wenn die Nachricht ankommt, und das deine Instanz am ende irgendwann zerstoert wird, auch wenn die Nachricht verlorengeht ....Ciao ...
-
Das ganze funktioniert natürlich nur, wenn das Fenster, an das Du die Nachricht
verschickst, zu Deinem Prozess gehört, da der Pointer nur im Kontext Deines
Prozesses gültig ist.
-
... das versendete Objekt noch existiert wenn die Message bearbeitet wird.
-
RHBaum schrieb:
Aehm da unter windows LPARAM und WPARAM der Groesse eines ueblichen Zeigers entsprechen, solltest keine Probleme mit haben ...
Und irgendwo erhaeltst dann an nem anderen Fenster deine Message ...
LPMsg pmsg; if(GetMessage(pmsg,NULL,...,...)) { CMyClass * pPtr = static_cast<CMyClass *>(pmsg->wParam); }Also das mit dem static_cast willd er compiler nicht wirklich. er bringt mir immer diesen fehler:
src\tmain.cpp(5307) : error C2440: 'static_cast' : 'long' kann nicht in 'struct
TapiData *' konvertiert werden
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
-
[quote="Stalin]Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.[/quote]
Eine Fehlermeldung, bei der die Lösung gleich dabei steht.Was will man mehr?
-
Ups, Asche auf mein Haupt !
<froehlich ein Lied zwitscher und unschuldig dreinschau ! >Ciao ...