2014-01-09 59 views
1

我想使用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是內存中數據的長度。

我該如何迭代ptr1的數據讀取每次下一個SmallInt?

我用Delphi 7,{$ POINTERMATH ON}不起作用

+2

將'Ptr1'強制轉換爲'PSmallInt'變量。然後使用'Inc',這會每次增加一個smallint大小的指針。 –

+0

閱讀:指針數學aka http://docwiki.embarcadero.com/RADStudio/XE3/en/Pointer_Math_(Delphi) –

+0

@DavidM這就是答案,而不是評論:-) –

回答

4

在現代德爾福,與{$POINTERMATH ON},你可以索引數組像這樣的內容:

PSmallint(ptr1)[i] 

如果你不必$POINTERMATH在你的Delphi,或者如果你喜歡離開它,你可以這樣做:

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

然後用訪問的元素:

PSmallintArray(ptr1)[i] 

就我個人而言,我從來沒有發現後者的方法來我的口味,但選擇是你的。

+1

版本不可知的方式是鑄造到PSmallIntArray –

+0

第二個選項效果很好。我無法使用第一個,因爲我使用的是舊版的delphi版本。謝謝 –