-
Дмитрий (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 - это разные вещи.