[DELPHI] Считывание данных из Pointer

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by s0l_ir0n, 7 May 2010.

  1. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    [DELPHI] Запись динамического массива в файл

    Новый вопрос:

    var
    nulldata:array of byte;
    i:integer;
    begin
    SetLength(nulldata, sizedata);
    for i:=1 to sizedata
    do nulldata:=$0;
    ...
    WriteFile(hFile,nulldata,sizeOf(nulldata),bytesread,nil);
    CloseHandle(hFile);
    ...
    При записи, в файл пишутся не данные из динамического массива, а его адрес =((
    Как это исправить?
     
    #1 s0l_ir0n, 7 May 2010
    Last edited: 7 May 2010
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    p или pb пусть у тебя будет pchar и работай потом норм с ним как со строкой.
    А тут ты говоришь что pb - это указатель на слово (которое 2 байта). Вот он и выводит по 2 байта.
     
  3. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    Ап. Вопрос изменил.
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    можно так
    WriteFile(hFile,@nulldata[0],sizeOf(nulldata),bytesread,nil);
    или так попробуй
    WriteFile(hFile,nulldata^,sizeOf(nulldata),bytesread,nil);

    Делфи может орать на несоответствие типов, там подбереш нужные
     
  5. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    Компилятор орет, пропускает только
    WriteFile(hFile,nulldata,sizeOf(nulldata),bytesread,nil);
    и
    WriteFile(hFile,PChar(nulldata)^,sizeOf(nulldata),bytesread,nil);
    но в обоих случаях записывается адрес, а не данные((((
     
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    попробуй тогда тк
    WriteFile(hFile, nulldata[0], sizeOf(nulldata),bytesread,nil);
     
  7. RDL_Rider

    RDL_Rider New Member

    Joined:
    21 Jun 2009
    Messages:
    100
    Likes Received:
    3
    Reputations:
    0
    По моему Sizeof в данном случае вернет размер указателя, т.е. 4 байта. Чтобы узнать длину нужно юзать ф-цию Length, не зря ведь память выделяется ф-цией SetLENGTH..