Allgemein
Pointer in Messages weitergeben ist ganz einfach, wenn man folgendes beachtet:
SendMessage: Referenzierung von Objekten auf dem Stack, im statischen Speicher und auf dem Heap möglich
PostMessage: nur Referenzierung von Objekten im statischen Speicher und auf dem Heap möglich
Sender
// Handle auf eine bel. Form HANDLE hForm = ...; // einen Dateinamen zusammenbauen char pcFileName[MAX_PATH]; strcpy(pcFileName, "c:\\test.txt"); // Nachricht WM_MAKESCREENSHOT absetzen und auf Ausführung warten SendMessage(hMainForm, WM_MAKESCREENSHOT, 0, (LPARAM)&pcFileName);
Empfänger
void TfrmMain::MMakeScreenShot(TMessage M)
{
TForm::Dispatch(&M);
// Zeiger in LParam auslesen und in den gewünschten Typ wandeln
char *pcFileName = (char*)M.LParam;
AnsiString sFileName(pcFileName);
MessageDlg(sFileName, mtInformation, TMsgDlgButtons() << mbOK, 0);
}
- Weiterführender Link: Passing pointers in messages