打印本文 打印本文 关闭窗口 关闭窗口
Delphi 接口笔记
作者:武汉SEO闵涛  文章来源:敏韬网  点击数776  更新时间:2009/4/23 18:31:05  文章录入:mintao  责任编辑:mintao

//  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每个对象都有自己的模式?并不相同?怎么回事?不明白!

打印本文 打印本文 关闭窗口 关闭窗口