Delphi中的接口类型转换

今天做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),否则在运行期会出现内存访问错误,且记!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值