Skocz do zawartości

Wyciągnąć z resów


Recommended Posts

Napisano

Zapisac do pliku plik? Nie zabardzo moze rozumiem o co ci chodzi. Czy chcesz zapisac cala strukture jakiegos pliku do zasobow czy na odwrot z zasobow wyciagnac dane do pliku?...Zapisac do pliku plik TTF o nazwie CLASSIC???? Czy TTF moze jest nazwa zasobu. W zasobach nie ma plikow tylko sa dane, ktore moga byc pobrane i dopiero z nich moze byc utworzony plik.

P.S. Zmien kodowanie polskich znakow na swojej stronie bo ich nie widac - krzacza sie.

Napisano

Chodzi o to że zapisałem cziconkę do resów:
kawałek pliku *.rc

CLASSIC TTF "arcade.classic.ttf"

I teraz chcę wyciągnąć ten plik z resów i zapisać w katalogu 'C:\Windows\Fonts'.

Napisano

No stary, jak to nie wiesz? Linkiem praktycznie zalatwilem wszystko. A wiec jesli chcesz wyciagnac zasob z programu, ktory wlasnie ma to zrobic to juz nie musisz korzystac z funkcji LoadLibrary, lub LoadLibraryEx (ta druga najczesciej jest stosowana do wyciagania zasobow z plikow 16 bitowych), tylko wystarczy zrobic tak (kod w delphi):

hres:=FindResource(nil,'CLASSIC','TTF'); //hres - uchwyt zasobu. Jesli blad to zwroci 0;

hMem := LoadResource(nil, hResource);  //bedzie blad to jw. W windows od 95 nie musisz stosowac pozniej FreeResource, bo system robi to automatycznie
  
lpResource := LockResource(hMem); //pobierasz wskaznik do danych
size:=SizeofResource(nil,hres); //pobierasz rozmiar

lpresource to wskaznik a size to rozmiar bloku zasobu. Chyba wiecej nic ci do szczescia nie potrzeba.

Wszystko pisalem praktycznie z pamieci i byc moze cos zle wklepalem (ale nie wydaje mi sie) to wal. ;)

Napisano
        Res:=FindResource(hInstance, 'CLASSIC', 'TTF');
        ACFont:=LoadResource(hInstance, Res);
        ACData:=LockResource(ACFont);
        CreateFile('cade.classic.ttf', 0, 0, nil, CREATE_NEW,
                   FILE_ATTRIBUTE_NORMAL, 0);
        WriteFile(Plik, ACData^, SizeofResource(hInstance, ACFont), HM, nil);
        CloseHandle(Plik);

Coś spieprzyłem?

Napisano
var res,ACFont,plik:THandle;
    ACData:pointer;
    HM:cardinal;
begin
  Res:=FindResource(hinstance, 'CLASSIC', 'TTF');
  ACFont:=LoadResource(hinstance, Res);
  ACData:=LockResource(ACFont);
  HM:=SizeofResource(hinstance, res);
  Plik:=CreateFile('classic.ttf', GENERIC_WRITE, 0, nil, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0);
  WriteFile(Plik, ACData^, HM, HM, nil);
  CloseHandle(Plik);
end.

Sam skonfrontuj swoje bledy

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...