Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamisches Array & ReadFile (https://www.delphipraxis.net/133460-dynamisches-array-readfile.html)

WorstNightmare 2. Mai 2009 10:14


Dynamisches Array & ReadFile
 
Hallo,

ich möchte ReadFile gerne ein dynamisches Array übergeben, allerdings schlägt es dann immer fehl.

Delphi-Quellcode:
function TPartition.ReadSector(Handle: THandle; lba, count: DWORD;
  var Buf): Integer;
var
  large: LARGE_INTEGER;
  read: DWORD;
  offset: Int64;
begin
  offset := lba;
  offset := offset * 512;
  large.QuadPart := offset;

  if not SetFilePointerEx(Handle, large, nil, FILE_BEGIN) then
  begin
  //  Result := 1;
    raise Exception.Create('SetFilePointerEx fehlgeschlagen!');
  end;

  read := 0;
  if not ReadFile(Handle, Buf, count * 512, read, nil) then
  begin
 //   Result := 1;
    raise Exception.Create('Sektor konnte nicht gelesen werden!');
  end;

  Result := 0;
end;

procedure TPartition.TestRead;
var
  bigBuf: array of Byte;
  i, disc_info_sz_lba: Integer;
begin
  i := 1;
  disc_info_sz_lba := 19;

  SetLength(bigBuf, 10000);
  Showmessage(IntToStr(SizeOf(bigBuf)));

  ReadSector(FHandle, 1 + i * disc_info_sz_lba, disc_info_sz_lba, bigBuf);
end;
Bei dem ShowMessage kommt 4 raus (ich glaube weil dynamische Arrays Pointer sind), wenn es aber ein statisches Array ist (damit funktioniert das Lesen dann auch), zeigt es die Länge + 1 oder 2 an. Somit kommt bei dieser dynamischen Variante "Sektor konnte nicht gelesen werden!".
Kann ich es irgendwie hinbekommen, die Größe dieses dynamischen Arrays zu vergrößern?

himitsu 2. Mai 2009 10:17

Re: Dynamisches Array & ReadFile
 
Code:
ReadSector(FHandle, 1 + i * disc_info_sz_lba, disc_info_sz_lba, bigBuf[b][0][/b]);
ein dynamisches Array ist intern ein Pointer auf seine Daten ... und diesen Zeiger mußt du erst irgendwie dereferenzieren :angel:

WorstNightmare 2. Mai 2009 10:18

Re: Dynamisches Array & ReadFile
 
Ohh, das ging ja schnell.
Vielen Dank, so geht es! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz