Zitat von
lbccaleb:
Achja, ist PostMessage in dem Fall nicht besser als SendMessage in deinem Code?
nee, SendMessage wertet, bis das andere Programm fertig ist
und das hab ich hier mal ausgenutzt, damit die Speicher reservierung und Freigabe in einer Hand (Programm) bleibt.
Delphi-Quellcode:
Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Size);
If Data <> 0 Then Begin
Try
DataPtr := GlobalLock(Data);
If DataPtr <> nil Then Begin
Try
CopyMemory(DataPtr, PChar(aText), Size);
If SendMessage(aWnd, WM_TSOPLAYFILE, Data, 0) = 0 Then {Fehler};
Finally
GlobalUnlock(Data);
End;
End Else {Fehler};
Finally
GlobalFree(Data);
End;
End Else {Fehler};
da die Speicherverwaltung des Strings aber Delphi übernimmt und PChar intern für einen vorhandenen Speicher sorgt, kann eigentlich keine
Exception entstehen (es sei den du hast irgendwo anders ein großes Problem)
Delphi-Quellcode:
Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Length(aText) + 1);
If Data <> 0 Then Begin
DataPtr := GlobalLock(Data);
If DataPtr <> nil Then Begin
CopyMemory(DataPtr, PChar(aText), Length(aText) + 1);
If SendMessage(aWnd, WM_TSOPLAYFILE, Data, 0) = 0 Then {Fehler};
GlobalUnlock(Data);
End Else {Fehler};
GlobalFree(Data);
End Else {Fehler};
und die andere Seite hatte ich ja schon geschrieben
Delphi-Quellcode:
DataPtr := GlobalLock(wParam);
If DataPtr = nil Then Begin
Try
s := PChar(DataPtr); // oder sonstwas
Finally
GlobalUnlock(wParam);
End;
End Else {Fehler};