今天做delphi的一个项目时,用到了接口转换方面的东东,经过数次失败后,终于成功,现将笔记记录如下:
首先声明一个接口:
unit UntPluginIntf;
interface
uses
MapXLib_TLB;
type
IMapAware = interface(IInterface)
function GetMapX():TMap;
end;
implementation
end.
然后在我的MainForm中实现该接口:
TfrmMain = class(TForm,IUnknown,IMapAware) //注意这个地方一定要加了IUnKnown;
......
public
function GetMapX():TMap;
end;
implementation
......
function TfrmMain.GetMapX: TMap;
begin
Result:=MainMap;
end;
在其它地方进行类型转换的代码:
var
AMap:TMap;
begin
AMap := (IMapAware(Self.HostApplication.MainForm as IUnknown)).GetMapX;
AMap.AboutBox;
end;
注意: Self.HostApplication.MainForm as IUnknown,这句,必须先转成IUnKnown,然后再转成我们的接口,不由会出现编绎错误;同时在上面的接口实现部分,也必须同时声明实现IUnknown接口:TfrmMain = class(TForm,IUnknown,IMapAware),否则在运行期会出现内存访问错误,且记!!