什么是CLSID?是图形用户界面吗?



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

  • 什么是CLSID?

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

通常在德尔福,你会打电话给CoCreateInstance。您只需调用该函数并传递 CLSID。CoCreateInstance 的声明将类 ID 参数声明为具有类型 TCLSID,这是 TGUID 的简单别名。所以通过其中之一。

以下是从德尔福来源提取的声明:

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

什么是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]

引用了两句话

最新更新