uiInterface=Interface(IInterface) 
end; utClass=class(TInterfacedObject) end; /////////////////////////////////////////////////////////////// 
function func(const oo:utClass):uiInterface; 
begin 
  result:=nil; 
  if oo 实现 uiinterface then 
    result:=oo as uiinterface; 
end; 

解决方案 »

  1.   

    如果 IInterface 有 GUID, 那么有好多方法可以实现, 给你一个democonst
    IID_frmRSProdSheetTemp = '{763A8157-45BD-480B-BDCB-7A8BC06EDB63}';type
      IfrmRSProdSheetTemp = interface
        [IID_frmRSProdSheetTemp]
        procedure GetPNData;
      end;
    TfrmRSProdSheetTemp = class(TfrmRSTemp, IProdSheet, IfrmRSProdSheetTemp)
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        FIProdSheet: IProdSheet;
        function GetProdSheet: IProdSheet;
      protected
        PrintCalc: Boolean;
        procedure GetPNData; virtual;
        property ProdSheet: IProdSheet read GetProdSheet implements IProdSheet;
      public
        { Public declarations }
      end;判断TfrmRSProdSheeTemp 是否支持 IfrmRSProdSheetTemp 接口就用下面下面的方法function GetIfrmRSProdSheetTemp: IfrmRSProdSheetTemp;
    begin
      Result := nil;
      if Supports(TfrmRSProdSheetTemp, IID_frmRSProdSheetTemp)then
       Result := TfrmRSProdSheetTemp.Create(nil)
      else
        ShowMessage('TfrmRSProdSheetTemp 不支持 IfrmRSProdSheetTemp接口');
    end;
     
    这个Blog 有更深层的用法
    http://hi.baidu.com/cncharles/blog/item/4a061df75e4fc123720eec20.html