2

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

到目前为止我所拥有的:

FFileOperation是一种TGUID类型。

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

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

4

1 回答 1

4

当您需要获取接口的 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.

于 2013-06-03T00:29:29.357 回答