8

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

  • 什么是 CLSID?
4

2 回答 2

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。

还有一个小技巧值得了解。如果您将接口类型作为 type 的参数传递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
  ...
于 2013-10-19T21:45:04.290 回答
6

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

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

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

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

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

引用了两句

于 2013-10-19T21:46:00.170 回答