Delphi-Quellcode:
begin
var SecurityAttr := Default(TSecurityAttributes); // inkl. sowas wie FillChar mit 0
SecurityAttr.nLength := SizeOf(TSecurityAttributes);
SecurityAttr.bInheritHandle := True;
//SecurityAttr.lpSecurityDescriptor := nil; // 0 bleibt ja 0
Result := CreatePipe(ReadPipe, WritePipe, @SecurityAttr, 0);
end;
Delphi-Quellcode:
var
SecurityAttr: TSecurityAttributes;
begin
SecurityAttr := Default(TSecurityAttributes); // inkl. sowas wie FillChar mit 0
...
Der Unterschied kann auch beim SecurityAttr sein, wie z.B. typloser Zeiger, typisierter Zeiger oder Const/Var/...
Also einfach mal die Deklaration von "deinem" verwendeten CreatePipe suchen und die Signatur (Typen der Parameter) ansehn,
sowie bei dir und der Deklaration prüfen, ob sie auf die "selben" Typ-Deklarationen der Parameter verweisen.
Also die Deklaration in
Winapi.Windows sieht eher so aus:
Das ist auch der Grund, warum z.B. zusammen mit Embas WinMD es gern raucht, da sich gern das mit Pointer vs. Const/Var unterscheidet. (für Pflichparameter, finde ich die Variante mit Const/Var handlicher)
Teilweise ist es im WinMD auch besser, weil Delphi teilweise hart CONST/VAR nutzt, auch für
optionale Parameter, welche durch sowas zur Pflicht werden (außer man castet böse mit NIL um sich)