c – 什么是CLSID?它是GUID吗?

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

>什么是CLSID?

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
  ...
翻译自:https://stackoverflow.com/questions/19471495/what-is-clsid-is-it-a-guid

转载注明原文:c – 什么是CLSID?它是GUID吗?