CLSID 数据类型到底是什么?因为它是在C++中使用的,我想在Delphi中使用它。
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
...
什么是 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]
引用了两句话