Delphi DLL – GetBytesPtr (Writing PByte to TStream)
Chilkat v9.5.0.80 adds a new BinData function named GetBytesPtr. It returns a pointer to the internal bytes contained within the BinData. This post shows one way of writing those bytes to a Delphi TStream (using the Chilkat non-ActiveX Delphi DLL).
procedure TForm1.Button2Click(Sender: TObject);
var
rawBytes: PByte;
ItemCount: Integer;
binDat: HCkBinData;
Stream: TMemoryStream;
Writer: TBinaryWriter;
byteArr: TBytes;
numBytes: Integer;
i: Integer;
begin
binDat := CkBinData_Create();
// Append 3 bytes (00, 01, and 02) to the CkBinData object.
CkBinData_AppendEncoded(binDat, '000102', 'hex');
// Return pointer to raw bytes (internal data) as a System.PByte
// Your application does not own the data. If you do something
// to the binDat, such as append more data, or Clear(), then
// your pointer to the bytes will become invalid.
rawBytes := CkBinData_getBytesPtr(binDat);
numBytes := CkBinData_getNumBytes(binDat);
SetLength(byteArr, numBytes);
// Create a type of TStream and write the bytes to it.
Stream := TMemoryStream.Create;
try
Writer := TBinaryWriter.Create(Stream);
try
for i := 0 to (numBytes - 1) do
begin
Writer.Write(rawBytes^);
Inc(rawBytes);
end;
finally
Writer.Free;
end;
finally
Stream.Free;
end;
end;
admin
0
Tags :