Jak wiecie rzadko o coś pytam, jednak natrafiłem na dość dziwny problem; Mianowicie potrzebuję stworzyć plik zasobów, w którym umioszczony będzie zwykły plik amorficzny, który chcę załadować w programie za pomocą klasy TResourceStream; Plik .res
ma być wkompilowany do zasobów exeka, który będzie z niego korzystał;
Aby dodać do pliku .res
plik amorficzny i wywoływać go na podstawie nazwy zasobu, stworzyłem plik .rc
z poniższą zawartością:
Config RCDATA "Config.tsinfo"
gdzie nazwa zasobu to Config
, typ zasobu to RCDATA
, a nazwa pliku na dysku to Config.tsinfo
; gotowy plik .res
nazywa się test.res
; W programie plik ładuję w następujący sposób:
{$R test.res}
var
rsInput: TResourceStream;
begin
rsInput := TResourceStream.Create(HINSTANCE, 'Config', 'TR_RCDATA');
try
{ using the resource }
finally
rsInput.Free();
end;
Wszystko śmiga; Jednak schody zaczynają się, gdy potrzebuję odwołać się do zasobu nie przez nazwę, a przed indeks (ID); Tworzę więc plik .rc
z poniższą zawartością:
10 RCDATA "Config.tsibin"
gdzie 10
to ID zasobu, RCDATA
to typ zasobu, a Config.tsibin
to nazwa pliku dyskowego; Kompiluję plik .rc
za tak samo za pomocą kompilatora brcc32.exe dołączonego do Delphi7, i używam go w programie w następujący sposób:
{$R test.res}
var
rsInput: TResourceStream;
begin
rsInput := TResourceStream.CreateFromID(HINSTANCE, 10, 'RT_RCDATA');
try
{ using the resource }
finally
rsInput.Free();
end;
Niestety zarówno pod Delphi7, jak i Lazarusem nie można odnaleźć takiego zasobu; Kompilacja pliku .rc
przebiega pomyślnie i plik .res
zostaje utworzony z poprawną zawartością (sprawdzałem pod hex-edytorem), jednak nijak nie można odnaleźć takiego zasobu; Przewaliłem sporo artykułów znalezionych w Google i wychodzi na to, że plik .rc
ma poprawną budowę, czyli najpierw nazwa lub indeks zasobu, następnie typ zasobu i ścieżka do pliku dyskowego;
Niestety nie potrafię tego pokonać, a już dawno nie bawiłem się zasobami, stąd nie mogę sobie przypomnieć w jaki sposób kiedyś korzystałem ładowałem pliki z zasobów na podstawie ich ID;
Może mnie ktoś wyprostować, w jaki sposób załadować pliki z zasobów na podstawie ich indeksów? Dodam tylko, że potrzebne mi to jest jedynie do testów mojej biblioteki, dlatego wolałbym nie korzystać z aplikacji firm trzecich do budowy zasobów; Chodzi mi tylko o jednorazowe przetestowanie poprawności algorytmu i na tym koniec zabawy z zasobami; Bardzo proszę o wskazówkę, bo na pewno gdzieś jest malutkie niedopatrzenie; Dziękuję z góry.