In der (recht alten, aber funktionierenden) oneinst.pas, die ich dazu verwende, wird beim Aufbau der WM_COPYDATA-Message nicht nur einfach der Pointer zum String übergeben, sondern es werden explizit die Daten kopiert. Mich wundert ehrlich gesagt ein wenig, dass dein alter Code überhaupt funktioniert ...
Delphi-Quellcode:
Data.lpData := ParamStrToBlob(Data.cbData);
// mit
function ParamStrToBlob(out cbData: DWORD): Pointer;
var
Loop: Integer;
pStr: PChar;
begin
cbData := Length(ParamStr(1)) * SizeOf(Char) + 4; { gleich inklusive #0#0 }
for Loop := 2 to ParamCount do
cbData := cbData + DWORD(Length(ParamStr(Loop)) * SizeOf(Char) + 2);
Result := GetMemory(cbData);
ZeroMemory(Result, cbData);
pStr := Result;
for Loop := 1 to ParamCount do
begin
lstrcpy(pStr, PChar(ParamStr(Loop)));
pStr := @pStr[lstrlen(pStr) + 1];
end;
end;
Ich hoffe, diese Variante funktioniert mit 10.4 weiter, wenn ich in den nächsten 30 Tagen umsteigen muss ...
The angels have the phone box.