Delphi和__uuidof

时间:2013-06-03 00:25:27

标签: windows delphi com guid

我正在将一个C源代码移植到Delphi,然后来到:memcpy(&FFileOperation,&__uuidof(IFileOperation), sizeof(GUID));

到目前为止我所拥有的:

FFileOperationTGUID类型。

CopyMemory (@FFileOperation, @iFileOperation, SizeOf (TGUID));

但我不知道如何正确使用它。 Delphi中的替代或类似命令是什么?它做了什么?

1 个答案:

答案 0 :(得分:4)

当您需要获取接口的GUID时,可以使用它。在您的情况下,您正在寻找IFileOperation的GUID。

在Delphi中,编译器会为您执行魔术。在C ++中需要使用__uuidof的地方,您可以简单地传递接口类型本身{@ 1}}。您可以在任何需要IFileOperation的上下文中使用接口类型,只要该接口定义了GUID,编译器就会为您完成剩下的工作。

所以,在C ++中你可以写:

GUID

在Delphi中你会写:

QueryInterface(__uuidof(IFileOperation), ...)

为了向您展示这种魔力是多么普遍,我提供了以下有趣的程序:

QueryInterface(IFileOperation, ...)

产生这个输出:

{00000000-0000-0000-C000-000000000046}

查看您的更新,您无需使用{$APPTYPE CONSOLE} uses SysUtils; var GUID: TGUID; begin GUID := IInterface; Writeln(GUIDToString(GUID)); Readln; end. 。您可以像这样写下这行代码:

CopyMemory

但是,变量命名是奇数。名为FFileOperation := IFileOperation; 的变量确实应该像这样声明:

FFileOperation

但我怀疑你甚至根本不需要这个变量。看起来它只持有GUID。 GUID在编译时是已知的。如果你把它放在任何地方,请保持不变。但你需要把它放在任何地方吗?当然,您可以删除它并用FIFileOperationGUID: TGUID; 替换所有用途。