Delphi 接口笔记

//  a:=stringToGuid('{000208FB-0000-0000-C000-000000000046}');
//  IChart 和 chart接口各自具有不同的GUID根本不相容
//  a:=stringtoGuid('{000208FB-0001-0000-C000-000000000046}');}
// StringToGuid 用于将 字符串GUID转换为 TGUID
// GuidToString 用于将TGUID转换为字符串guid
//varSupports 判断 Variant 变量 是否支持 TGuid这个接口

procedure TForm1.btnGenerateClick(Sender: TObject);
var
  Guid: TGUID;
begin
  CoCreateGuid(Guid);
  Memo1.Lines.Add(GuidToString(Guid));
end;
Supports 函数 判断是否支持特定接口;
CoCreateGuid 这个procedure 可以生成GUID号。
GuidToString 将TGUID转换成字符串GUID
StringToGuid 将字符串GUID转换成 TGUID 类型

TGUID 声明
  TGUID = packed record
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
  end;
GUID 例子:
{D2552D95-A2D7-48D8-AA27-F08E810779BD}

当 interface 变量 赋值为Nil时自动释放。
可以将实现某接口的变量作为参数直接赋值给需要这个接口作为参数的过程或函数。

接口数组的声明:
FEmpArray: Array[1 .. MAX_EMPLOYEES] of IUnknown;

OLE容器中的自动化对象与iMPORT 后的 xxxx_tlb.PAS 的通信方式。
var
 vsht:IUnknown;
 isht:_Workbook;
begin
  olc.Run;
  if not (olc.State=osRunning) then olc.Run;
  vsht:=olc.OleObjectInterface;  //调用OLE容器D的OleObjectInterface 而不是OleObject
  isht:=vsht as _Workbook;
  esht.ConnectTo(isht);
  (esht.Worksheets.Item[1] as _WorkSheet).Cells.Item[1,1].value:=25;
  esht.Application.Quit;
  esht.Disconnect;
end;

问题:
 Delphi Import office 的 Graph 对象后为什么会生成 IApplication、IChart……等这样的接口和
Dispinterface 这样的接口有什么区别?,另外 Graph中 Dispinterface 的接口可以在注册表中找到相同的GUID而i开头的接口就找不到,为什么?另外根据FLAG来看,似乎声明成了 HIDDEN DISPABLE
是什么含义?
隐藏接口吗?有什么用?调试? 为什么EXCEL的IMPORT没有?

接口真的是好乱啊:
导入每个COM组件的XXXX_TLB.pas每个对象都有自己的模式?并不相同?怎么回事?不明白!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值