如何编写这行代码以允许它编译
MoveMemory(poleFileDescriptorW
, (oleDataPointer + SizeOf(oleFileDescriptorW) *Index + 4)^
, SizeOf(oleFileDescriptorW));
特别是这部分
(oleDataPointer + SizeOf(oleFileDescriptorW)*Index + 4)^
我只想将指针移动SizeOf(oleFileDescriptorW)*Index + 4
字节
变量定义为:
pOLEFileDescriptorW : ^FILEDESCRIPTORW;
oleDataPointer : Pointer;
答案 0 :(得分:8)
转换为整数类型,进行数学运算并退回。
我通常使用Cardinal
,但我认为这不适用于64位编译器。
Pointer(NativeInt(oleDataPointer) + SizeOf(oleFileDescriptorW)*Index + 4)
答案 1 :(得分:6)
如果您正在使用DELPHI> = 2009,请将$ POINTERMATH设置为ON,您可以直接使用指针算法
答案 2 :(得分:2)
MoveMemory
和相同的CopyMemory
函数接受指针,而不是变量,因为Delphi RTL函数Move
需要(这是{之间的唯一区别} {1}}和MoveMemory
)。
所以你不应该取消引用指针。只是做
Move
其中每个参数都是指针/基数。根据您的实际数据类型,您可能需要进行一些简单的转换。例如,您可能需要执行MoveMemory(poleFileDescriptorW,
(oleDataPointer + SizeOf(oleFileDescriptorW)*Index + 4),
SizeOf(oleFileDescriptorW));
。
无论如何,如果你有时需要取消引用指针,你需要指定它的类型。
PSomeType(cardinal(myPointer) + cardinal(myPointer2))
无法工作(为什么?)。做
(oleDataPointer + SizeOf(oleFileDescriptorW)*Index + 4)^
答案 3 :(得分:1)
Typecast to Integer。
Pointer(Integer(oleDataPointer) + SizeOf(oleFileDescriptionW) * Index + 4)
Andreas是正确的,你应该直接使用指针。 看看是否有效。
上帝保佑