Browse Source

tests: test arguments passing for dispinterfaces

git-svn-id: trunk@14784 -
paul 15 years ago
parent
commit
d08508419d
1 changed files with 32 additions and 5 deletions
  1. 32 5
      tests/test/tdispinterface2.pp

+ 32 - 5
tests/test/tdispinterface2.pp

@@ -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.