C 中的CONTAINING_RECORD 宏根据结构中字段成员的地址返回结构/记录类型变量的基地址。在我只能将预定义的记录指针传递给触发回调的某些 Windows API 函数的情况下,它非常有用。
例如,如果我有一些类型,例如:
type
tInnerRecord = record
x, y : integer;
end;
pInnerRecord = ^tInnerRecord
tOuterRecord = record
field1 : integer;
inner : tInnerRecord;
field2 : integer;
end;
pOuterRecord = ^tOuterRecord;
我希望能够做类似的事情:
procedure SomeCallback( pIn : pInnerRecord ); stdcall;
var
Out : pOuterRecord;
begin
Out := CONTAINING_RECORD(pIn, tOuterRecord, inner);
Out.field1 := pIn.x + pIn.y;
end;
在我的具体情况下,我想将我的对象指针与 ReadFileEx(Windows 异步 I/O)的重叠数据指针一起传递,以便我可以在回调中访问该对象。
在 Delphi (2006) 中是否有提供类似功能的等效功能?