什么是CLSID?是 GUID 吗?

问题描述 投票:0回答:2

CLSID 数据类型到底是什么?因为它是在C++中使用的,我想在Delphi中使用它。

c++ delphi interface
2个回答
10
投票

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
  ...

6
投票

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

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

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

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

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

引用了两句话

© www.soinside.com 2019 - 2024. All rights reserved.