function Realloc(P: Pointer; Size: Integer): Pointer; stdcall;
procedure Free(P: Pointer); stdcall;
function GetSize(P: Pointer): Integer; stdcall;
function DidAlloc(P: Pointer): Integer; stdcall;
procedure HeapMinimize; stdcall;
end;
在某些接口声明中,intece关键字被换成了dispintece,这种构造(连同dispid、readonly
指示字)是平台相关的,不能在Linux程序中使用。 writeonly
- 141 - 和
Object inteces
IIntece and inheritance(接口和继承)
接口和类一样,继承它的祖先所有的方法;但接口不象类,它们不实现方法。一个接口继承的是实现这些方法的义务,把这个义务委托给支持此接口的任何一个类。
声明一个接口时可以指定一个祖先接口,如果没有指明的话,则它直接继承自IIntece。IIntece在System单元定义,是其它所有接口的根类。IIntece定义了三个方法:QueryIntece、_AddRef和_Release。
注意:IIntece和IUnknown是相同的。考虑到平台无关性,通常要使用IIntece;IUnknown最好用在一些特殊的程序中,它依赖于Windows平台。
QueryIntece支持在一个对象所实现的不同接口之间自由跳转;_AddRef和_Release为接口引用提供生命期内存管理。实现这三个方法最简单的方式是从TIntecedObject(在System单元声明)派生一个类。若在实现这些方法时使用空函数,就可以忽略它们,但COM对象(只适用于Windows)必须通过_AddRef和_Release进行管理。
Intece identification(接口标志)
一个接口声明可指定一个全局唯一标识符(GUID),它用一个被中括号括起来的字符串表示,它出现在接口的成员之前。GUID部分以如下形式声明:
['{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}']
GUID是一个16字节的二进制数,它唯一地标识一个接口。如果一个接口有GUID,则可以通过查询接口来获得它的实现的引用。
TGUID和PGUID在System单元声明,用来对GUID进行操作。
type
PGUID = ^TGUID;
TGUID = packed record
D1: Longword;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
当你声明一个TGUID类型的常量时,可以用字符表示它的值,例如
const IID_IMalloc: TGUID = '{00000002-0000-0000-C000-000000000046}';
在调用过程或函数时,GUID或者一个接口的名称(标识)都可以作为TGUID类型的值参或常量参数。例如下面的声明
function Supports(Unknown: IIntece; const IID: TGUID): Boolean;
Supports函数可以用下面的两种方法进行调用:
if Supports(Allocator, IMalloc) then ... //接口名称
if Supports(Allocator, IID_IMalloc) then ... //GUID常量
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-106.html
醉了永远半张脸