- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
delphi编程:Delphi的接口编程基础介绍
疯狂代码 http://CrazyC/ ĵ http:/CrazyC/Delphi/Article11585.html
为什么使用接口?
举个例子好了:有这样个卖票服务电影院可以卖票歌剧院可以卖票客运站也可以卖票那么我们是否需要把电
影院、、歌剧院和客运站都设计成个类架构以提供卖票服务?要知道连经理人都可以卖票很显然不适合把经理
人也包括到卖票服务继承架构中我们需要只是个共通卖票服务于是卖票服务是个接口电影院、歌剧院什么只要
都遵循这样个服务定义就能很好地相互交互和沟通(如果须要话)
如何在Delphi中使用接口
1、声明接口
IMyInterface=erface(IInterface)//介绍说明(1)
[’{63E072DF-B81E-4734-B3CB-3C23C7FDA8EA}’]//介绍说明(2)
functionGetName(conststr:String):String;stdcall;
functionQueryInterface(constIID:TGUID;outObj):HResult;stdcall;//介绍说明(3)
function_AddRef:Integer;stdcall;//使接口引用数加1
function_Release:Integer;stdcall;//使接口引用数减1当小于等于0时作释放动作
end;
介绍说明(1):如果有继续关系则在括号里填父接口否则省却如:IMyInterface=erface这样就行
介绍说明(2):此GUID可选如果要实现具有COM特性接口话则需要加上Delphi中对于有GUID接口在运行时
在VMT表预定位置生成接口信息如接口思路方法定义、思路方法参数定义能详细信息
介绍说明(3):接口必须实现这 3个
2、接口实现
接口服务是由类来实现
TIntfClass=(TObject,IMyInterface)
private
FCounter:Integer;
FRefCount:Integer;
public
functionQueryInterface(constIID:TGUID;outObj):HResult;stdcall;
...
end;
3、获取接口
a.使用类型转换如:
varaIntf:IMyInterface;
begin
aObj:=TIntfClass.Create;
try
aIntf:=(IMyInterface(aObj);
...
b.利用Delphi编译器内建机制如:aIntf:=aObj
c.利用对象QueryInterface思路方法如OleCheck(aObj.QueryInterface(IID,aIntf));只能存取有
GUIDCOM接口
d.利用as操作符
使用as操作符必须符合下面条件:
1.接口必须明确地指定是从IInterface接口继承下来
2.必须拥有GUID值
在Delphi7中接口实现类还必须是从TInterfacedObject继承下来才行如:
TIntfClass=(TInterfacedObject,IMyInterface)
4、接口和对象生命期
Delphi会自行检查接口如果在使用后没有释放而在生成里加上释放代码但也因这样带来了问题如下面代码:
var
i:Integer;
aObj:TIntfClass;
aIntf:IMyInterface;
begin
aObj:=TIntf.Create;
try
aIntf:=aObj; [Page]
aIntf.GetName...
finally
aIntf:=nil;
FreeAndNil(aObj);
end;
上面代码执行话会产生存取违规是对接口置nil时已释放接口而FreeAndNil(aObj)会再释放aIntf次而在对
aIntf置
nil时已释放了该对象解决这个问题只要不让接
您可能关注的文档
最近下载
- 【外研社Unipus】新探索研究生英语(基础级)读写教程U6课件_AE2.pptx VIP
- 人教新起点五年级上册英语Unit2 lesson1课件.ppt VIP
- 脊柱常见病的介绍.pptx
- 英格索兰空压机操作培训.ppt VIP
- 机电专业毕业设计论文题目及机电一体化专业毕业论文.docx VIP
- 【外研社Unipus】新探索研究生英语(基础级)读写教程U1课件_AE1.pptx VIP
- 报价单范本完整版.doc VIP
- 2025年人教版七年级英语小升初暑假衔接:七上Starter Unit 2 Keep Tidy! 讲义(学生版+教师版).docx
- 2025年广东省中考英语试题卷(含标准答案及解析)+听力音频.docx
- XS9922B芯片用户指南_V1.3-海格.pdf
文档评论(0)