如何从内存指针顺序读取数据,元素后面的元素?

时间:2014-01-09 22:10:10

标签: delphi pointers memory delphi-7

我想使用FMOD库中的一个函数来锁定给定声音的内存中的数据并返回指向数据的指针,因此可以对数据进行一些读取或修改:

function FSOUND_Sample_Lock(Sptr: PFSoundSample; Offset: Integer; Length: Integer; 
        var Ptr1: Pointer; var Ptr2: Pointer; var Len1: Cardinal; 
        var Len2: Cardinal): ByteBool;

ptr1和ptr2是指向内存的指针,len1和len2是内存中数据的长度。

如何在每次下一次SmallInt时读取ptr1读取的数据?

我正在使用Delphi 7,因此{$ POINTERMATH ON}不起作用

1 个答案:

答案 0 :(得分:4)

在使用{$POINTERMATH ON}的现代Delphi中,您可以像这样索引数组的元素:

PSmallint(ptr1)[i]

如果您的Delphi中没有$POINTERMATH,或者您希望将其关闭,则可以执行以下操作:

type
  TSmallintArray = array[0..MaxInt div SizeOf(Smallint)-1] of Smallint;
  PSmallintArray = ^TSmallintArray;

然后使用:

访问元素
PSmallintArray(ptr1)[i]

就我个人而言,我从来没有找到适合自己口味的方法,但选择权归你所有。