Конференция "WinAPI" » Бинарный файл в ресурсе [D6, WinXP]
 
  • Дмитрий (10.01.12 16:33) [0]
    Доброго времени суток, Уважаемые.
    Необходимо в процессе работы программы извлечь бинарный файл (225Kb) из ресурсов, сохранить на диск, загрузить файл в буфер программы, удалить файл с диска.
    Делаю так :
    Предварительно создал файл MyProj.rc
    100 RCDATA 100.bin
    скомпилил его brcc32.exe, получил MyProj.res


    implementation
    ...
    {$R *.dfm}
    {$R MyProj.RES}

    procedure TMainForm.Button2Click(Sender: TObject);
    var
    rStream: TResourceStream;
    fStream: TFileStream;
    fname: string;
    begin
    fWriteToLogEnable := false;

    fname := ExtractFileDir(Paramstr(0)) + 'Temp.bin';
    rStream := TResourceStream.Create(MainForm.Handle, '100', 'RCData') ;
    try
     fStream := TFileStream.Create(fname, fmCreate) ;
     try
      fStream.CopyFrom(rStream, 0) ;
     finally
      fStream.Free;
     end;
    finally
     rStream.Free;
    end;
    end;



    После выполнения получаю ошибку "Resourse 100 Not Found". Причем вьюверами ресурсов (Restorator, Resxplor из Delphi Example) отлично вижу ресурс 100 в секции RCData в файлах MyProj.res и MyProj.exe.
    Что не так делаю ?
  • Дмитрий (10.01.12 16:37) [1]
    Кстати, MainForm.Handle осталось от экспериментов, уже пробовал и с MainForm.res. Правильней в данном случае всё-таки будет Application.Handle.
  • Медвежонок Пятачок © (10.01.12 17:36) [2]
    FindHandle:=FindResource(HInstance,'NAME_OF_RESOURCE',RT_RCDATA);

    if FindHandle > 0 then
     begin
      ResHandle := LoadResource(HInstance,FindHandle);
      if ResHandle > 0 then
       try
        Ptr     := LockResource(ResHandle);
        fStream := TFileStream.Create(AFileName,fmCreate);
        fStream.Write(Ptr^,SizeOfResource(HInstance,FindHandle));
       finally
        fStream.Free;
       end;
     end;
  • han_malign (10.01.12 17:57) [3]
    rStream := TResourceStream.Create(HInstance, '#100',  RT_RCDATA) ;
    rStream := TResourceStream.CreateFromID(HInstance, 100, RT_RCDATA);
  • Дмитрий (11.01.12 08:36) [4]
    Спасибо. Сделал как в [2]. Самое интересное, что я именно так пробовал ранее (нашел в FAQ), но с именем ресурса '100', а не '#100'
  • icWasya © (11.01.12 08:59) [5]
    Ресурс может иметь название в виде строки или ввиде числа <65536. Строка '100' и число 100 - это разные вещи.
 
Конференция "WinAPI" » Бинарный файл в ресурсе [D6, WinXP]
Есть новые Нет новых   [134431   +6][b:0][p:0.001]