Browse Source

* Make IInterface methods virtual, as in Delphi

Michaël Van Canneyt 1 year ago
parent
commit
54b8de47f0
1 changed files with 13 additions and 1 deletions
  1. 13 1
      packages/rtl-objpas/src/inc/rtti.pp

+ 13 - 1
packages/rtl-objpas/src/inc/rtti.pp

@@ -682,7 +682,9 @@ type
     fImpls: array of TMethodImplementation;
     fImpls: array of TMethodImplementation;
     fVmt: PCodePointer;
     fVmt: PCodePointer;
   protected
   protected
-    function QueryInterface(constref aIID: TGuid; out aObj): LongInt;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function QueryInterface(constref aIID: TGuid; out aObj): LongInt;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; reintroduce; virtual;
+    function _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; reintroduce; virtual;
+    function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; reintroduce; virtual;
 
 
     procedure HandleUserCallback(aUserData: Pointer; const aArgs: TValueArray; out aResult: TValue);
     procedure HandleUserCallback(aUserData: Pointer; const aArgs: TValueArray; out aResult: TValue);
   public
   public
@@ -6128,6 +6130,16 @@ begin
     Result := inherited QueryInterface(aIID, aObj);
     Result := inherited QueryInterface(aIID, aObj);
 end;
 end;
 
 
+function TVirtualInterface._AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; 
+begin
+  Result:=Inherited _AddRef;
+end;
+
+function TVirtualInterface._Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+begin
+  Result:=Inherited _Release;
+end;
+
 procedure TVirtualInterface.HandleUserCallback(aUserData: Pointer; const aArgs: TValueArray; out aResult: TValue);
 procedure TVirtualInterface.HandleUserCallback(aUserData: Pointer; const aArgs: TValueArray; out aResult: TValue);
 begin
 begin
   {$IFDEF DEBUG_VIRTINTF}Writeln('Call for ', TRttiMethod(aUserData).Name);{$ENDIF}
   {$IFDEF DEBUG_VIRTINTF}Writeln('Call for ', TRttiMethod(aUserData).Name);{$ENDIF}