浏览代码

* Updated tests for new IUnknown.QueryInterface, _AddRef and _Release definitions

git-svn-id: branches/xpcom@16097 -
joost 15 年之前
父节点
当前提交
0c454d7535

+ 4 - 4
tests/tbs/tb0546.pp

@@ -41,9 +41,9 @@ type
    private
    private
       FInnerX: TInnerObject;
       FInnerX: TInnerObject;
    protected
    protected
-    function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
-    function _AddRef: Integer; stdcall;
-    function _Release: Integer; stdcall;
+    function QueryInterface(constref IID: TGUID; out Obj): HResult; virtual; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
     function GetX: TInnerObject; virtual;
     function GetX: TInnerObject; virtual;
     function GetY: IYInterface;
     function GetY: IYInterface;
    public
    public
@@ -96,7 +96,7 @@ begin
    result := -1;
    result := -1;
 end;
 end;
 
 
-function TFoo.QueryInterface(const IID: TGUID; out Obj): HResult;
+function TFoo.QueryInterface(constref IID: TGUID; out Obj): HResult;
 begin
 begin
   if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE;
   if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE;
 end;function TFoo.GetX: TInnerObject;
 end;function TFoo.GetX: TInnerObject;

+ 6 - 6
tests/test/tinterface4.pp

@@ -13,9 +13,9 @@ type
   end;
   end;
   TA = class(TObject, IA, IInterface)
   TA = class(TObject, IA, IInterface)
     destructor Destroy; override;
     destructor Destroy; override;
-    function _AddRef: Integer; stdcall;
-    function _Release: Integer; stdcall;
-    function QueryInterface(const iid: TGuid; out obj): HResult; stdcall;
+    function _AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function QueryInterface(constref iid: TGuid; out obj): HResult; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
     procedure AfterConstruction; override;
     procedure AfterConstruction; override;
     class function NewInstance: TObject; override;
     class function NewInstance: TObject; override;
   end;
   end;
@@ -32,13 +32,13 @@ begin
   inherited AfterConstruction;
   inherited AfterConstruction;
 end;
 end;
 
 
-function TA._AddRef: Integer; stdcall;
+function TA._AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 begin
 begin
   InterlockedIncrement(fRefCount);
   InterlockedIncrement(fRefCount);
   Result := 0;
   Result := 0;
 end;
 end;
 
 
-function TA._Release: Integer; stdcall;
+function TA._Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 begin
 begin
   InterlockedDecrement(fRefCount);
   InterlockedDecrement(fRefCount);
   if fRefCount = 0 then begin
   if fRefCount = 0 then begin
@@ -49,7 +49,7 @@ begin
   Result := 0;
   Result := 0;
 end;
 end;
 
 
-function TA.QueryInterface(const iid: TGuid; out obj): HResult; stdcall;
+function TA.QueryInterface(constref iid: TGuid; out obj): HResult; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 begin
 begin
   Result := E_NOINTERFACE;
   Result := E_NOINTERFACE;
 end;
 end;

+ 4 - 2
tests/test/tsafecall1.pp

@@ -1,14 +1,16 @@
+program test;
 { %TARGET=win32,win64,wince}
 { %TARGET=win32,win64,wince}
 {$ifdef fpc}
 {$ifdef fpc}
 {$mode objfpc}
 {$mode objfpc}
 {$endif}
 {$endif}
 uses
 uses
-  SysUtils;
+  SysUtils,classes;
 type
 type
-  TTest = class
+  TTest = class(TComponent)
   public
   public
     procedure SomeError; safecall;
     procedure SomeError; safecall;
     function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override;
     function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override;
+    procedure QueryInterface(constref IID: TGUID; out Obj): Hresult; override; cdecl;
   end;
   end;
 
 
 var
 var

+ 4 - 4
tests/webtbs/tw10897.pp

@@ -22,9 +22,9 @@ type
     fRef: Integer;
     fRef: Integer;
   public
   public
     function GetOwner: IMyIntf;
     function GetOwner: IMyIntf;
-    function QueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall;
-    function _AddRef: Integer; stdcall;
-    function _Release: Integer; stdcall;
+    function QueryInterface(constref IID: TGUID; out Obj): HRESULT; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
     procedure Poing;
     procedure Poing;
   end;
   end;
  
  
@@ -52,7 +52,7 @@ begin
   Writeln('GetOwner2');
   Writeln('GetOwner2');
 end;
 end;
  
  
-function TMYClass.QueryInterface(const IID: TGUID; out Obj): HRESULT;
+function TMYClass.QueryInterface(constref IID: TGUID; out Obj): HRESULT;
 begin
 begin
   if GetInterface(IID, Obj) then
   if GetInterface(IID, Obj) then
     result := S_OK else result := -1;
     result := S_OK else result := -1;

+ 8 - 8
tests/webtbs/tw15363.pp

@@ -10,18 +10,18 @@ type
   TTestBE = class (TObject, ITest)
   TTestBE = class (TObject, ITest)
     function TestIt: integer;
     function TestIt: integer;
     { IInterface }
     { IInterface }
-    function _AddRef: Integer; stdcall;
-    function _Release: Integer; stdcall;
-    function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
+    function _AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function QueryInterface(constref IID: TGUID; out Obj): HResult; virtual; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
   End;
   End;
 
 
   TTest = class (TPersistent, IInterface)
   TTest = class (TPersistent, IInterface)
     BE : TTestBE;
     BE : TTestBE;
     protected
     protected
     { IInterface }
     { IInterface }
-    function _AddRef: Integer; stdcall;
-    function _Release: Integer; stdcall;
-    function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
+    function _AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function QueryInterface(constref IID: TGUID; out Obj): HResult; virtual; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
   End;
   End;
 
 
 function TTestBE.TestIt : integer;
 function TTestBE.TestIt : integer;
@@ -39,7 +39,7 @@ begin
   Result := -1;
   Result := -1;
 end;
 end;
 
 
-function TTest.QueryInterface(const IID: TGUID; out Obj): HResult;
+function TTest.QueryInterface(constref IID: TGUID; out Obj): HResult;
 begin
 begin
   Result := BE.QueryInterface(IID, obj);
   Result := BE.QueryInterface(IID, obj);
 end;
 end;
@@ -54,7 +54,7 @@ begin
   Result := -1;
   Result := -1;
 end;
 end;
 
 
-function TTestBE.QueryInterface(const IID: TGUID; out Obj): HResult;
+function TTestBE.QueryInterface(constref IID: TGUID; out Obj): HResult;
 begin
 begin
   if GetInterface(IID, Obj)
   if GetInterface(IID, Obj)
     then Result := 0
     then Result := 0

+ 6 - 6
tests/webtbs/tw16592.pp

@@ -24,9 +24,9 @@ type
     protected
     protected
       FRefCount : longint;
       FRefCount : longint;
     public
     public
-      function QueryInterface(const iid : tguid;out obj) : longint;stdcall;
-      function _AddRef : longint;stdcall;
-      function _Release : longint;stdcall;
+      function QueryInterface(constref iid : tguid;out obj) : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+      function _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+      function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 
 
       constructor Create;
       constructor Create;
 
 
@@ -96,7 +96,7 @@ end;
     WriteLn(Format('%s Obj=$%P class=%s RefCount=%d', [Str, Pointer(Self), ClassName, FRefCount]));
     WriteLn(Format('%s Obj=$%P class=%s RefCount=%d', [Str, Pointer(Self), ClassName, FRefCount]));
   end;
   end;
 
 
-function TInterfacedObj.QueryInterface(const iid: tguid; out obj): longint;stdcall;
+function TInterfacedObj.QueryInterface(constref iid: tguid; out obj): longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
   begin
   begin
     Result:=GetInterface(iid, obj);
     Result:=GetInterface(iid, obj);
 
 
@@ -105,7 +105,7 @@ function TInterfacedObj.QueryInterface(const iid: tguid; out obj): longint;stdca
       Result:=FOwner.QueryInterface(iid, obj);
       Result:=FOwner.QueryInterface(iid, obj);
   end;
   end;
 
 
-  function TInterfacedObj._AddRef : longint;stdcall;[public,alias:'TInterfacedObj_AddRef'];
+  function TInterfacedObj._AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};[public,alias:'TInterfacedObj_AddRef'];
   begin
   begin
     if not FDestructorCalled then
     if not FDestructorCalled then
       begin
       begin
@@ -117,7 +117,7 @@ function TInterfacedObj.QueryInterface(const iid: tguid; out obj): longint;stdca
       end;
       end;
   end;
   end;
 
 
-  function TInterfacedObj._Release : longint;stdcall;
+  function TInterfacedObj._Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
   begin
   begin
     if FDestructorCalled then Exit;
     if FDestructorCalled then Exit;
 
 

+ 6 - 6
tests/webtbs/tw2177.pp

@@ -16,25 +16,25 @@ type
 
 
   Twii= class(TObject, ii)
   Twii= class(TObject, ii)
     s: string;
     s: string;
-    function QueryInterface(const IID: TGUID; out Obj): Integer; stdcall;
-    function _AddRef: Integer; stdcall;
-    function _Release: Integer; stdcall;
+    function QueryInterface(constref IID: TGUID; out Obj): Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+    function _Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 
 
     procedure Show;stdcall;
     procedure Show;stdcall;
   end;
   end;
 
 
   {________doomy interfaces______}
   {________doomy interfaces______}
-  function Twii.QueryInterface(const IID: TGUID; out Obj): Integer; stdcall;
+  function Twii.QueryInterface(constref IID: TGUID; out Obj): Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
   begin
   begin
     result:= -1;
     result:= -1;
   end;
   end;
 
 
-  function Twii._AddRef: Integer; stdcall;
+  function Twii._AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
   begin
   begin
     result:= -1;
     result:= -1;
   end;
   end;
 
 
-  function Twii._Release: Integer; stdcall;
+  function Twii._Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
   begin
   begin
     result:= -1;
     result:= -1;
   end;
   end;

+ 6 - 6
tests/webtbs/tw4086.pp

@@ -19,9 +19,9 @@ type
  
  
  ttestclass1 = class(tobject,itest)
  ttestclass1 = class(tobject,itest)
   public
   public
-   function queryinterface(const guid: tguid; out obj): hresult; stdcall;
-   function _addref: integer; stdcall;
-   function _release: integer; stdcall;
+   function queryinterface(constref guid: tguid; out obj): hresult; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+   function _addref: integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
+   function _release: integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
    procedure testproc;
    procedure testproc;
  end;
  end;
 
 
@@ -32,19 +32,19 @@ type
  
  
 { ttestclass1 }
 { ttestclass1 }
 
 
-function ttestclass1.queryinterface(const guid: tguid; out obj): hresult; stdcall;
+function ttestclass1.queryinterface(constref guid: tguid; out obj): hresult; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 begin
 begin
  result:= integer(e_nointerface);
  result:= integer(e_nointerface);
 end;
 end;
 
 
-function ttestclass1._addref: integer; stdcall;
+function ttestclass1._addref: integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 begin
 begin
  writeln('addref called');
  writeln('addref called');
 // result:= inherited _addref;
 // result:= inherited _addref;
  result:= -1;
  result:= -1;
 end;
 end;
 
 
-function ttestclass1._release: integer; stdcall;
+function ttestclass1._release: integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
 begin
 begin
  writeln('release called');
  writeln('release called');
 // result:= inherited _release;
 // result:= inherited _release;