我正在将一个C
源代码移植到Delphi,然后来到:memcpy(&FFileOperation,&__uuidof(IFileOperation), sizeof(GUID));
。
到目前为止我所拥有的:
FFileOperation
是TGUID
类型。
CopyMemory (@FFileOperation, @iFileOperation, SizeOf (TGUID));
但我不知道如何正确使用它。 Delphi中的替代或类似命令是什么?它做了什么?
答案 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;
替换所有用途。