This is what my collegue has done where as fParams is a protected pointer var, and it seem to be working, however the sink has problems with fpc 2.7
function TActiveX.GetParam(Index: Integer): OleVariant;
begin
result := OleVariant(tagDISPPARAMS(fParams^).rgvarg[Index]);
end;
procedure TActiveX.SetParam(Index: Integer; Value: OleVariant);
begin
tagDISPPARAMS(fParams^).rgvarg[Index] := Value;
end;
procedure TActiveX.Internal_SINK(Sender: TObject; DispID: Integer;
const IID: TGUID; LocaleID: Integer; Flags: Word;
var Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer);
begin
fParams := @Params;
if Assigned(OnXEvent) then
OnXEvent(self, DispID, GUIDToString(IID), LocaleID);
end;