我正在将C
源代码移植到 Delphi 并来到:memcpy(&FFileOperation,&__uuidof(IFileOperation), sizeof(GUID));
.
到目前为止我所拥有的:
FFileOperation
是一种TGUID
类型。
CopyMemory (@FFileOperation, @iFileOperation, SizeOf (TGUID));
但我不知道如何正确使用它。Delphi 中的替代或类似命令是什么?它有什么作用?
当您需要获取接口的 GUID 时,您将使用它。在您的情况下,您正在寻找IFileOperation
.
在 Delphi 中,编译器为您执行魔法。在这种情况下,如果您需要__uuidof
在 C++ 中使用,您可以简单地传递接口类型本身IFileOperation
。您可以在任何需要 a 的上下文中使用接口类型,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
.