odczyt pliku z zasobów programu

Odpowiedz Nowy wątek
2006-10-01 20:47
0

mam pewien obrazek w zasobach i nie wiem jak go "wypakowac" z programu do okreslonego katalogu
dla jasnosci programuje w Microsoft visual c++ v5.0

Pozostało 580 znaków

2006-10-01 21:32
0

jezeli masz go w skompilowanym exeku to sprobuj programu resource hacker (obecnie funkcjonuje pod inna nazwa).

Pozostało 580 znaków

2006-10-02 18:09
0

nie dokladnie mi o to chodzilo, byc moze zle to objasnilem
pisze program ktury w zasobach bedzie mial jakis obrazek i chce zeby przy okreslonym zdarzeniu wypakowal(lub skopiowal z zasobów) mi ten obrazek do okreslonego folderu

Pozostało 580 znaków

2006-10-02 18:38
0

Poczytaj o:

  • FindResource
  • LoadResource
  • SizeofResource
  • LockResource

Pozostało 580 znaków

2006-10-03 14:05
0

ok....poszedłem za waszymi podpowiedziami i udalo mi sie napisac takie cos

HRSRC res;
HGLOBAL hres;
DWORD hsize; 
HANDLE hplik;

res = FindResource(NULL, MAKEINTRESOURCE(142), RT_RCDATA);
if(res == 0) MessageBox("BŁĄD res", "error", MB_OK);
hres = LoadResource(NULL, res);
if(hres == NULL) MessageBox("BŁĄD hres", "error", MB_OK);
hsize = SizeofResource(NULL, res);
hplik = CreateFile("c:\\plik.JPEG", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0);
WriteFile(hplik,(LPCVOID)hres, hsize, &hsize, NULL);
CloseHandle(hplik);  

niestety problem pojawia sie teraz w Findresource a dokladniej "MAKEINTRESOURCE(142)" po prostu nie chce sie zaladowac ten obrazek o ID 142, prubowalem tez zamiast tego MAKEINTRESOURCE(142) wpisac po prostu IDR_OBRAZ1 (mÓj obrazek w zasobach) oraz prubowalm go wpiszac w nawiasy zamiast 142
w wyniku tego res zwraca mi wartosc 0
macie jakies pomysly jak to rozwiazac?? :-( :-( :-( :-(

Pozostało 580 znaków

2006-10-03 17:37
0

Jeze;o obrazek jest zapisany w zasobach jako IDR_OBRAZ1 to uzyj MAKEINTRESOURCE(IDR_OBRAZ1)

Pozostało 580 znaków

2006-10-03 19:57
0

juz prubowalem :-(
macie jeszcze jakies inne pomysly, moze jakies przeozenia robie :/

Pozostało 580 znaków

2006-10-03 20:10
0

Pokreciles to troche, zapisujesz do pliku nie to co trzeba. Musisz uzyc LockResource zeby pobrac dane do zapisania.

Sprobuj tak:

BYTE *data;
DWORD c;

data=LockResource(hres);
WriteFile(hplik,data,hsize,&c,NULL);
CloseHandle(hplik); 

No i oczywiscie nie:

res = FindResource(NULL, MAKEINTRESOURCE(142), RT_RCDATA);

...tylko:

res = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(142), RT_RCDATA);

Jako pierwszy parametr musisz podac HInstance exeka z zasobami.

I jeszcze jedna sprawa, zdaje sie, ze w windowsach starszych niz 2000 jest jakies ograniczenie co do rozmiaru zasobów, takze jezeli chcesz zeby program dzialal w np w WinMe/98 to pakowanie duzych obrazkow do exeka nie jest dobrym pomyslem.

Pozostało 580 znaków

2006-10-04 00:45
beściak
0
surex napisał(a)

mam pewien obrazek w zasobach i nie wiem jak go "wypakowac" z programu do okreslonego katalogu
dla jasnosci programuje w Microsoft visual c++ v5.0

Masz go w zasobach jako Bitmap, RCdata, czy jeszcze może jeszcze inaczej (np. jako dialog :-D )?

Pozostało 580 znaków

2006-10-04 17:38
0

ok....dzieki tobie teraz wypakowuje mi ten plik
niestety nie moge sie uwolnic od pecha i znowu cos nie gra [glowa] [glowa] [glowa]
oto zmodyfikowany kod:

HRSRC res;
HGLOBAL hres;
DWORD hsize; 
HANDLE hplik;
HGLOBAL data; //musialem zmienic typ zmiennej bo cos muj kompilator nie chcial przysoic sobie BYTE
DWORD c;

res = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(142), RT_BITMAP);
if(res == 0) MessageBox("BŁĄD res", "error", MB_OK);
hres = LoadResource(NULL, res);
if(hres == NULL) MessageBox("BŁĄD hres", "error", MB_OK);

hsize = SizeofResource(NULL, res);
data=LockResource(hres);
hplik = CreateFile("c:\\plik.bmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0);
data=LockResource(hres);
WriteFile(hplik,data,hsize,&c,NULL);
CloseHandle(hplik); 

problem polega na tym ze jak juz mi sie ten obrazek wypakuje to nie chce sie otworzyc :/
zaglądnołem za pomoca notanika do niego i zauwarzylem ze brakuje danych wpliku tzn na poczatku nie bylo paru bajtów i kawalek dalej zobaczylem ze niekture bajty sa zmienione
oto plik ktury dodaje do zasobów
http://surexeasy.w.interia.pl/cos/background1.bmp
a oto ten sam plik ktury zostal wypakowany z programu
http://surexeasy.w.interia.pl/cos/plik.bmp

Pozostało 580 znaków

2006-10-04 18:37
0

problem juz nieaktualny :>
nareszcie rozwiazalem problem :-) :-) :-) :-) :-) :-)
thx za pomoc, gdyby nie wy to bym sobie nie poradził [!!!] [!!!] [!!!] [!!!] [!!!]

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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