Delphi和__uuidof

我将一个C源代码移植到Delphi中,并提交到: memcpy(&FFileOperation,&__uuidof(IFileOperation), sizeof(GUID));

我到目前为止:

FFileOperation是一个TGUIDtypes。

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

但我不知道如何正确使用它。 delphi的替代或类似的命令是什么? 它有什么作用?

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

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

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

 QueryInterface(__uuidof(IFileOperation), ...) 

在德尔福你会写:

 QueryInterface(IFileOperation, ...) 

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

 {$APPTYPE CONSOLE} uses SysUtils; var GUID: TGUID; begin GUID := IInterface; Writeln(GUIDToString(GUID)); Readln; end. 

它产生这个输出:

 {00000000-0000-0000-C000-000000000046}

看着你的更新,你不需要使用CopyMemory 。 你可以写这样的代码行:

 FFileOperation := IFileOperation; 

但是,变量命名是奇怪的。 名为FFileOperation的变量确实应该这样声明:

 FIFileOperationGUID: TGUID; 

但是我怀疑你甚至需要变量。 它看起来只能保持GUID。 该GUID在编译时已知。 如果你把它拿在任何地方,把它保持在一个常数。 但是你需要把它放在哪里? 当然,你可以删除它,并用IFileOperation替换所有用途。