我想在delphi中使用这个简单的C函数,但不能完美地将值转换为指针。德尔福指针铸造
C函数:
PVOID GetInterfaceMethod(PVOID intf, DWORD methodIndex)
{
return *(PVOID*)(*(DWORD_PTR*)intf + methodIndex);
}
德尔福功能:
function GetInterfaceMethod(const intf; methodIndex: DWORD): Pointer;
begin
// return *(PVOID*)(*(DWORD_PTR*)intf + methodIndex); x64
// return *(PVOID*)(*(DWORD*)intf + methodIndex * 4); x86
Result := Pointer(Pointer(DWORD_PTR(Pointer(intf)^) + methodIndex)^); //x64
end;
对不起我的英语不好。
在查看x86实现(Delphi例程中的注释代码)时,x64实现显然是错误的。所以C函数可能是错误的(如果乘以8)。这也是有道理的,因为参数被称为methodIndex而不是byteOffset,或者类似于依赖于调用方的体系结构。 –
'return *(PVOID *)(*(DWORD_PTR *)intf + methodIndex * sizeof(PVOID));'可以在任何地方工作,尽管这样做可能是一种非常蹩脚的方式。 –