接口.类;根据名称获取类或接口.该如何处理
接口.类;根据名称获取类或接口.?
有接口
IA=interface
Ta=class(tinterfaceobject,Ia)
可以根据字符串Ta 取到 接口 IA 吗?
------解决方案--------------------
function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean; overload;
function Supports(const Instance: TObject; const IID: TGUID; out Intf): Boolean; overload;
------解决方案--------------------
如果 IInterface 有 GUID, 那么有好多方法可以实现, 给你一个demo
const
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
有接口
IA=interface
Ta=class(tinterfaceobject,Ia)
可以根据字符串Ta 取到 接口 IA 吗?
------解决方案--------------------
function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean; overload;
function Supports(const Instance: TObject; const IID: TGUID; out Intf): Boolean; overload;
------解决方案--------------------
如果 IInterface 有 GUID, 那么有好多方法可以实现, 给你一个demo
const
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