|
@@ -16,22 +16,40 @@ type
|
|
property Disp1: integer;
|
|
property Disp1: integer;
|
|
procedure Disp2;
|
|
procedure Disp2;
|
|
property Disp402: wordbool dispid 402;
|
|
property Disp402: wordbool dispid 402;
|
|
|
|
+ procedure DispArg1(Arg: IUnknown);
|
|
|
|
+ procedure DispArg2(Arg: IDispatch);
|
|
|
|
+ procedure DispArg3(var Arg: wordbool);
|
|
end;
|
|
end;
|
|
|
|
|
|
var
|
|
var
|
|
cur_dispid: longint;
|
|
cur_dispid: longint;
|
|
|
|
+ cur_argtype: byte;
|
|
|
|
|
|
{$HINTS OFF}
|
|
{$HINTS OFF}
|
|
-procedure DoDispCallByID(res : Pointer; const disp : IDispatch;desc : PDispDesc; params : Pointer);
|
|
|
|
-begin
|
|
|
|
- if desc^.dispid <> cur_dispid then
|
|
|
|
- halt(cur_dispid);
|
|
|
|
-end;
|
|
|
|
|
|
+ procedure DoDispCallByID(res: Pointer; const disp: IDispatch; desc: PDispDesc;
|
|
|
|
+ params: Pointer);
|
|
|
|
+ begin
|
|
|
|
+ if desc^.dispid <> cur_dispid then
|
|
|
|
+ halt(cur_dispid);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ procedure DoDispCallByIDArg(res: Pointer; const disp: IDispatch; desc: PDispDesc;
|
|
|
|
+ params: Pointer);
|
|
|
|
+ begin
|
|
|
|
+ if desc^.calldesc.argcount <> 1 then
|
|
|
|
+ halt(4);
|
|
|
|
+ if desc^.calldesc.argtypes[0] <> cur_argtype then
|
|
|
|
+ halt(cur_argtype);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+
|
|
{$HINTS ON}
|
|
{$HINTS ON}
|
|
|
|
|
|
var
|
|
var
|
|
II: IIE;
|
|
II: IIE;
|
|
|
|
+ B: wordbool;
|
|
begin
|
|
begin
|
|
|
|
+ // check dispid values
|
|
DispCallByIDProc := @DoDispCallByID;
|
|
DispCallByIDProc := @DoDispCallByID;
|
|
cur_dispid := 300;
|
|
cur_dispid := 300;
|
|
II.Disp300;
|
|
II.Disp300;
|
|
@@ -41,4 +59,13 @@ begin
|
|
II.Disp2;
|
|
II.Disp2;
|
|
cur_dispid := 402;
|
|
cur_dispid := 402;
|
|
II.Disp402 := True;
|
|
II.Disp402 := True;
|
|
|
|
+ // check arguments
|
|
|
|
+ DispCallByIDProc := @DoDispCallByIDArg;
|
|
|
|
+ cur_argtype := varunknown;
|
|
|
|
+ II.DispArg1(nil);
|
|
|
|
+ cur_argtype := vardispatch;
|
|
|
|
+ II.DispArg2(nil);
|
|
|
|
+ cur_argtype := varboolean or $80;
|
|
|
|
+ B := False;
|
|
|
|
+ II.DispArg3(B);
|
|
end.
|
|
end.
|