我想使用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]
就我个人而言,我从来没有找到后一种方法来满足自己的喜好,但选择是您的。