我想使用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}不起作用

最佳答案

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

PSmallint(ptr1)[i]


如果您的Delphi中没有$POINTERMATH,或者您希望保留它,则可以执行以下操作:

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


然后使用以下命令访问元素:

PSmallintArray(ptr1)[i]


就我个人而言,我从来没有找到后一种方法来满足自己的喜好,但选择是您的。

09-11 17:35
查看更多