Zeiger in Messages übergeben

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