什么是CLSID?它是GUID吗?

Mah*_*ser 8 c++ delphi interface

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

  • 什么是CLSID?

Dav*_*nan 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;
Run Code Online (Sandbox Code Playgroud)

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

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

if not Succeeded(CoCreateInstance(CLSID_WICImagingFactory, ...)) then
  ...
Run Code Online (Sandbox Code Playgroud)

您可能会创建一个不同的接口,因此需要用适当的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
  ...
Run Code Online (Sandbox Code Playgroud)

  • 使用IDE的"在文件中查找"功能进行搜索很容易找到它们.或者,您可以使用CTRL +单击符号来查找其定义.尽管它对您了解答案很有用,但对您自己如何找到答案的一些提示将对您有所帮助! (3认同)

mas*_*oud 6

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

您可以将CLSID视为一个软件或软件组件的"社会安全号码".

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

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

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

引用了两个引用

  • 是的,都尝试制作(伪)唯一ID.CLSID以COM类对象为目标. (2认同)