Ich vermute es liegt dann an dem const der TGUID. IIRC wird ohne const der record zuerst kopiert und dann an die Funktion übergeben. Mit const wird nur eine reference zu dem record auf den stack gepushed. Das heißt du pushed eine reference auf den stack, während dort eigentlich der record direkt erwartet wird. Innerhalb der Funktion wird dann wohl auf invaliden Speicher zugegriffen.
Ja, das könnte sein, aber die IID wird in dieser Methode auch nur als const weitergegeben:
Code:
function Supports(const Instance: IInterface; IID: TGUID; out Intf): Boolean;
begin
Result := (Instance <> nil) and (Instance.QueryInterface(IID, Intf) = 0);
end;
Definition der QueryInterface:
Code:
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;