什么是CLSID?它是GUID吗?

时间:2013-10-19 21:42:02

标签: c++ delphi interface

我想知道什么是CLSID数据类型,因为它在C ++中使用,我想在delphi中使用它。

  • 什么是CLSID?

2 个答案:

答案 0 :(得分:9)

CLSID是标识COM对象的GUID。为了实例化已注册的COM对象,您需要知道它的CLSID。

通常在Delphi中,您将调用CoCreateInstance。您只需调用该函数并传递CLSID即可。声明CoCreateInstance将类ID参数声明为TCLSID类型,它是TGUID的简单别名。通过其中一个。

以下是从Delphi源代码中提取的声明:

type
  TCLSID = TGUID;

function CoCreateInstance(const clsid: TCLSID; unkOuter: IUnknown;
  dwClsContext: Longint; const iid: TIID; out pv): HResult; stdcall;

从我的代码库中调用CoCreateInstance的示例:

const
  CLSID_WICImagingFactory: TGUID = '{CACAF262-9370-4615-A13B-9F5539DA4C0A}';

if not Succeeded(CoCreateInstance(CLSID_WICImagingFactory, ...)) then
  ...

您可能会创建一个不同的界面,因此需要替换该界面的相应CLSID。

另外还有一个值得了解的小技巧。如果将接口类型作为类型TGUID的参数传递,并且该接口类型具有GUID,则编译器将替换GUID。所以上面的代码同样可以编写:

type
  IWICImagingFactory = interface
    // this is the GUID of the interface, the CLSID
    [{ec5ec8a9-c395-4314-9c77-54d7a935ff70}] 
    ....
  end;

....

if not Succeeded(CoCreateInstance(IWICImagingFactory, ...)) then
  ...

答案 1 :(得分:6)

  

什么是CLSID?类ID(CLSID)是128位(大)数字,表示软件应用程序或应用程序的唯一ID   零件。通常它们显示如下   “{AE7AB96B-FF5E-4dce-801E-14DF2C4CD681}”。

     

您可以将CLSID视为一部分的“社会安全号码”   软件或软件组件。

     

它们用于什么? Windows使用CLSID来识别软件组件,而无需知道其“名称”。他们也可以   被软件应用程序用于识别计算机,文件或其他   项目

     

它们来自哪里? Microsoft提供了一个名为GUIDGEN.EXE的实用程序(程序)来生成这些数字。它们是由...生成的   使用当前时间,网络适配器地址(如果存在)等   计算机中的项目,这样两个数字就不会相同。 [1]

  

COM类由CLSID命名,它们是OSF / DCE定义的UUID   RPC [2]

引用两个引号