Mmh, leider ist der Versuch fehlgeschlagen ;_;
cbData:=Length(SAPointer^) * SizeOf(ShortString);
Mit dieser Länge erhalte ich nun zwar keine
AV mehr, jedoch ist der Inhalt des arrays vollkommen willkürlich gefüllt. Hier mal mein Code vom Empfängerprogramm:
Delphi-Quellcode:
procedure TFMain.WMCopyData(var Msg: TWMCopyData);
type
PStringArray = ^TStringArray;
TStringArray = array of ShortString;
const
MY_PLAY = 0;
MY_ADD = 1;
var
SAPointer : PStringArray;
i : Integer;
FileName : ShortString;
[...]
begin
SAPointer:=PStringArray(Msg.CopyDataStruct.lpData);
if (SAPointer = nil) then exit;
[...]
try
case Msg.CopyDataStruct.dwData of
MY_PLAY :
begin
for i:=Low(SAPointer^) to High(SAPointer^) do
begin
FileName:=SAPointer^[i];
[...]
end;
end;
MY_ADD :
begin
for i:=Low(SAPointer^) to High(SAPointer^) do
begin
FileName:=SAPointer^[i];
[...]
end;
end;
MY_SHOW :
begin
[...]
end;
end;
finally
[...]
// Einzelelemente freigeben
for i:=High(SAPointer^) downto Low(SAPointer^) do
SetLength(SAPointer^[i],0);
// array freigeben
SetLength(SAPointer^,0);
Dispose(SAPointer);
end;
end;