interface(IUnknown)是什么意思,有什么作用(20)

  • 主题发起人 主题发起人
  • 开始时间 开始时间

Unregistered / Unconfirmed
GUEST, unregistred user!
IBaseDataFile = interface(IUnknown) function getCount: Integer; function getFileName: string; function getHeader: Pointer; function getHeaderSize: Integer; function getRec(Index: Integer): Pointer; function getRecSize: Integer; procedure loadFromFile(const FileName: string); procedure saveAs(FileName: string); function seek(Index: Integer): Pointer; end;
 
interface(IUnknown)便是接口IBaseDataFile从IUnknown接口继承。小样多看基础书吧,别想一步登天。
 
1、COM的规范约定,所有的接口或者它的原始祖先,都必须从IUNKNOWN承接,IUNKNOWN必须实现三个方法,既QueryInterface, _AddRef, and _Release。2、IBaseDataFile = interface(IUnknown),既表示宣告的接口IBaseDataFile从IUNKNOWN继承,因而IBaseDataFile也具有实现QueryInterface, _AddRef, and _Release三个方法的能力,也就具备用Com的Delphi实现架构实现Com的能力。3、对Delphi而言IBaseDataFile = interface 和IBaseDataFile = interface(IUnknown)的写法基本上是一致的。如果非要说有什么不一样,应该说IBaseDataFile = interface 这种写法是不依赖操作系统平台,而IBaseDataFile = interface(IUnknown)这种写法仅支持MS的Windows平台,因为IUnknown的叫法应该是MS的Mr.Don Box(好像Mr.Don Box的车牌号码就是IUNKNOWN的个性号,山姆大仙真牛哥)提出的吧。如果你写的代码与平台无关,可以忽略。4、有一点可以了解下,就是Delphi的发展(可以理解为编译器的发展)中,应该是先有Interface的实现(Delhi3中?),后来才实现MS的Com的架构(Dephi5中?),也就才有了IUnknown。所以,在代码System单元中,可以看到Interface宣告在前。再有IUnknown = Interface的历史(不晓得是不是这样)5、另外,从观念上讲,接口归接口,Com只是MS实现接口的一套方法途径。Com意为Component Object Modal,非串口之类的意思。6、如果上面这段代码的做法目的是要实现Com的一些AP,应该注意下代码中宣告的方法的数据类型,以及各方法调用的编译约定。应该采用对应的WideXXXX、OleVariant诸如此类的数据类型来定义(比如string类型,应该用WideString类型,string类型为Dephi自己创建的数据类型,不是Com和OS所要),另外调用方法约定比如Safecall等也要注意下。否则,在不同进程间,或者跨电脑间可能会有问题发生。老弟加油,完毕!
 
开始我也不太懂,多看看关于面向对象的书吧。
 
基本书看不进去,只能先学飞再学爬了
 
多人接受答案了。
 
非常感谢Bruce.xm老兄的详细解说,看完你的解说非常感动.很佩服你的功力和经验.我那天实在是太急于弄懂这个原程序的主要功能的实现部分和主要架构.谢谢你的帮忙.
 

Similar threads

I
回复
0
查看
732
import
I
I
回复
0
查看
715
import
I
I
回复
0
查看
590
import
I
I
回复
0
查看
632
import
I
后退
顶部