Browse Source

+ infrastructure for DispInterface call dispatching

git-svn-id: trunk@5793 -
florian 18 years ago
parent
commit
21955282d0
6 changed files with 21 additions and 3 deletions
  1. 1 0
      rtl/inc/compproc.inc
  2. 14 0
      rtl/inc/objpas.inc
  3. 2 0
      rtl/inc/objpash.inc
  4. 1 0
      rtl/win32/system.pp
  5. 1 0
      rtl/win64/system.pp
  6. 2 3
      rtl/wince/system.pp

+ 1 - 0
rtl/inc/compproc.inc

@@ -313,6 +313,7 @@ procedure fpc_intf_assign(var D: pointer; const S: pointer); compilerproc;
 procedure fpc_intf_assign_by_iid(var D: pointer; const S: pointer; const iid: TGUID); compilerproc;
 function  fpc_intf_as(const S: pointer; const iid: TGUID): IInterface; compilerproc;
 function fpc_class_as_intf(const S: pointer; const iid: TGUID): IInterface; compilerproc;
+procedure fpc_dispatch_by_id(Result: Pointer; const Dispatch: IDispatch;DispDesc: Pointer; Params: Pointer); compilerproc;
 {$endif FPC_HAS_FEATURE_CLASSES}
 
 

+ 14 - 0
rtl/inc/objpas.inc

@@ -13,6 +13,20 @@
 
  **********************************************************************}
 
+    procedure DoDispCallByIDError(res : Pointer; const disp : IDispatch;desc : PDispDesc; params : Pointer);
+      begin
+        handleerrorframe(RuntimeErrorExitCodes[reVarDispatch],get_frame);
+      end;
+
+
+    procedure fpc_dispatch_by_id(Result: Pointer; const Dispatch: IDispatch;
+      DispDesc: Pointer; Params: Pointer); compilerproc;
+      type
+        TDispProc = procedure(res : Pointer; const disp : IDispatch;desc : PDispDesc; params : Pointer);
+      begin
+        TDispProc(DispCallByIDProc)(Result,Dispatch,DispDesc,Params);
+      end;
+
 {****************************************************************************
                   Internal Routines called from the Compiler
 ****************************************************************************}

+ 2 - 0
rtl/inc/objpash.inc

@@ -330,3 +330,5 @@
            vtQWord      : (VQWord: PQWord);
        end;
 
+  var
+    DispCallByIDProc : pointer;

+ 1 - 0
rtl/win32/system.pp

@@ -1143,4 +1143,5 @@ begin
   initvariantmanager;
   initwidestringmanager;
   InitWin32Widestrings;
+  DispCallByIDProc:=@DoDispCallByIDError;
 end.

+ 1 - 0
rtl/win64/system.pp

@@ -1167,4 +1167,5 @@ begin
   initvariantmanager;
   initwidestringmanager;
   InitWin32Widestrings;
+  DispCallByIDProc:=@DoDispCallByIDError;
 end.

+ 2 - 3
rtl/wince/system.pp

@@ -1807,9 +1807,8 @@ initialization
   initvariantmanager;
   initwidestringmanager;
   InitWinCEWidestrings
-
+  DispCallByIDProc:=@DoDispCallByIDError;
+  
 finalization
-  { Cleanup }
   SysCleanup;
-  
 end.