[Delphi] Dodawanie zasobów

0

Próbuję dodać zasoby do jakiegoś pliku wykonywalnego za pomocą funkcji winapi. Studiując Windows SDK doszedłem do takiego czegoś:

uchwyt:=BeginUpdateResource(PChar(open.filename), false);
UpdateResource(uchwyt, RT_RCDATA, 'Zasob', 0, ???, ???);
EndUpdateResource(uchwyt, false);

I teraz nie wiem co dać jako te ostatnie parametry, bo aby załadować np. bitmapę, używa się funkcji loadbitmap(), ikonę-loadicon(), a dowolny plik... [???] Przy okazji chętnie się dowiem, jak zmierzyć wielkość tego zasobu :)

Dwa ostatnie parametry updateresource() to:

<font color="green">lpData

Points to the resource data to be inserted into the executable file. If the resource is one of the predefined types, the data must be valid and properly aligned. Note that this is the raw binary data stored in the executable file, not the data provided by LoadIcon, LoadString, or other resource-specific load functions. All data containing strings or text must be in Unicode format; lpData must not point to ANSI data.
If lpData is NULL, the specified resource is deleted from the executable file.

cbData

Specifies the size, in bytes, of the resource data at lpData. </span>

0

Może trzeba ten zasób załadować do pamięci np. TMemoryStream a potem

uchwyt:=BeginUpdateResource(PChar(open.filename), false);
UpdateResource(uchwyt, RT_RCDATA, 'Zasob', 0, MemoryStream.Memory, MemoryStream.Size);
EndUpdateResource(uchwyt, false);

Będę musiał to sprawdzić bo też mi się to przyda :)

DOPISANE
No więc sprawdziłem się pomęczyłem i jest :) u mnie kod wygląda tak
Uchwyt:=BeginUpdateResource(PChar(Nazwa+'.exe'), False);
UpdateResource(Uchwyt, RT_RCDATA, 'INSTALKA', 1045, Mem.Memory, Mem.Size);
EndUpdateResource(Uchwyt, False);

Nie podawaj 0!! bo program nie zobaczy zasobu musi być 1045 :)

0

No spoko tesh sie z tym meczylem.
Dodawanie to pikus ale jak taki zasob pozniej odczytac to juz nie wiem niby wszystko robie oka wykorzystalem juz chyba 1000 sposobow - odczytywalem zasoby jako TResourceStream przez API i qpa zasob jest widoczny ale ma wielkosc 0 bajtow.
Program typu ResourceHacker widzi go poprawnie a ja sobie juz powyrywalem wszystkie wlosy z glowy.

Moze ktos ma jakis pomysl?

0

Moze ktos ma jakis pomysl?

Zobacz czy używasz w Delphi małych liter w nazwie zasobu jeśli tak to zamień na duże - głupia rzecz ale to powód tego że może nie działąć. Także wersja języka to 1045 i powinno działać OK :)

0

Dzieki wielkie naprawde nie wpadlbym na to zeby uzywac samych duzych liter.

A tak przy okazji to gdzie to wyczylales? czy moze sam doszedles do tego.

Dzieki wielkie

0

NIektorzy po prostu juz od urodzenia sa geniuszami... ;-) Pozdrawiam :-) :-) :-) :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1