gpt4 book ai didi

c++ - 什么是 CLSID?它是一个GUID吗?

转载 作者:可可西里 更新时间:2023-11-01 17:25:54 36 4
gpt4 key购买 nike

我想知道 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 的示例,取 self 的代码库:

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

if not Succeeded(CoCreateInstance(CLSID_WICImagingFactory, ...)) then
...

您可能会创建一个不同的接口(interface),因此需要为该接口(interface)替换适当的 CLSID。

还有一个值得了解的小技巧。如果您将接口(interface)类型作为 TGUID 类型的参数传递,并且该接口(interface)类型具有 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
...

关于c++ - 什么是 CLSID?它是一个GUID吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471495/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com