我将一个C
源代码移植到Delphi中,并提交到: memcpy(&FFileOperation,&__uuidof(IFileOperation), sizeof(GUID));
。
我到目前为止:
FFileOperation
是一个TGUID
types。
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
替换所有用途。