Einzelnen Beitrag anzeigen

ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Suche die TByteBuffer Klasse aus SysUtils ab XE 3 (?)

  Alt 18. Okt 2013, 12:33
Eine Klasse TByteBuffer gab es schon: wurde 2010 innerhalb einer von Mike Heydon entwickelten und hier veröffentlichten Unit vorgestellt:
Delphi-Quellcode:
Type
  TByteBuffer = class(TObject)
  strict private type
    PByteArray = ^TByteArray;
    TByteArray = array [0..0] of byte;
  strict private
    FBufLen : integer;
    FBuffer : PByteArray;
    function GetFAddress : pointer;
    function GetFValue(AIndex : integer) : byte;
    procedure SetFValue(AIndex : integer; AValue : byte);
  public
    constructor Create(ABufferSize : integer);
    destructor Destroy; override;
    procedure Assign(ABufferPointer : pointer);
    procedure FillBytes(AValue : byte);
    // Properties
    property Address : pointer read GetFAddress;
    property BufferSize : integer read FBufLen;
    property Value[AIndex : integer] : byte read GetFValue write SetFValue;
  end;
Kommentar des Autors (M.Heydon) in der Unit:
TByteBuffer - Creates a a simple static byte array buffer that can be used as pointers to API calls or I/O functions. The Delphi dynamic "TBytes : array of byte" does not always react in the way you think when passing it as a buffer to API or I/O calls.
TByteBuffer uses GetMem and FreeMem as opposed to SetLength(arr,x) and thus passes a TRUE pointer to the actual data. TBytes will sometimes act as a pointer to a pointer to the data.


Allerdings ist in seiner Klasse keine Methode AddBytes() deklariert. Zudem wird der Puffer in der Instanz von TByteBuffer als statisches Array angelegt. Jedoch ohne größeres Problem lässt sich die Klasse derart abändern und erweitern (cf. Methode AddBytes()), dass man eine dynamische Pufferverwaltung erreicht (was ja für ein AddBytes() zwingend erforderlich ist), ohne die im o.g. Kommmentar des Autors formulierten, besonderen Ziele zu verlieren.

Leider aber ist www.delphi3000.com (bereits spätestens seit 2012) nicht mehr im INet vorhanden. Insoweit die (ursprüngliche) Implementierung genau dieser Klasse TByteBuffer zur weiteren Modifizierung von Interesse wäre, könnte ich sie zur Verfügung stellen.
  Mit Zitat antworten Zitat