Pokaż wyniki 1 do 7 z 7

Temat: [C++]Funkcja wypakowywujące Resource Files

  1. #1
    Zarejestrowany
    Dec 2009
    Postów
    5

    Domyślnie [C++]Funkcja wypakowywujące Resource Files

    Witam was ponownie, mam nadziej że i tym razem mi pomożecie.
    Piszę program, dodałem do niego kilka Resoruce Files (plików źródłowych?). I jest to ładnie wszystko w jednym skompilowanym pliku, lecz chcę ażeby po odpaleniu tego pliku wszystkie zawarte w nim pliki się rozpakowały, nie koniecznie wszystkie naraz funkcja może wypakowywać każdy z osobna. Mam nadzieje ze wiecie o co mi chodzi.
    I tutaj moje pytanie, istnieje jakaś funkcja tego typu?
    Jeśli tak to proszę powiedźcie jaka

  2. #2
    Zarejestrowany
    Dec 2009
    Postów
    11

    Domyślnie

    Kod wydobywajacy zasoby z pliku powinien wyglac mniejwiecej tak:

    Kod:
    HINSTANCE hInstance = GetModuleHandle(NULL);
     
    LPCTSTR Typ = RT_BITMAP;
    
    for(i=RSRC_01; i<=RSRC_0X; i++)
    {
        HRSRC hRsrc = FindResource(hInstance, MAKEINTRESOURCE(i), Typ);
    
        if (hRsrc)
        {
            DWORD cbRes = SizeofResource(hInstance, hRsrc);
            LPVOID pResData = LockResource(LoadResource(hInstance, hRsrc));
    
            hFile = CreateFile("file.bin", FILE_ALL_ACCESS, 0, NULL, 
                                    CREATE_ALWAYS, 0, NULL);
    
            while(cbRes--)
            {
                DWORD numWritten;
                WriteFile(hFile, filePtr, 1, &numWritten, NULL);
                filePtr++;
            }
        }
    }
    I to by bylo cos kolo tego. Nalezalo by tu dodac sprawdzanie poprawnego wywolania kolejnych funkcji - MSDN, tworzenie odpowiednich nazw zapisywanych plikow... Jesli zasoby sa roznych typow to wszystko mozna by wrzucic do jakiejs tablicy tzn. typ zasobu odpowiadajace mu id zasobu oraz nazwe tworzonego pliku. Mam nadzieje ze dobrze zrozumialem twoja wypowiedz

  3. #3
    Zarejestrowany
    Dec 2009
    Postów
    5

    Domyślnie

    A co z nietypowymi typami plików?
    Mianowicie u mnie to będą dwa pliki jeden .exe drugi to biblioteka .dll

  4. #4
    Zarejestrowany
    Dec 2009
    Postów
    11

    Domyślnie

    Zatem wszystkie zasoby powinny byc typu RCDATA a nie RT_BITMAP jak napisalem w przykladzie. Zmienne beda jedynie identyfikatory zasobow (trzeba je odczytac z pliku *.rc) i nazwy tworzonych plikow (wedle uznania).

  5. #5
    Zarejestrowany
    Dec 2009
    Postów
    164

    Domyślnie

    nie lepiej zrobic to recznie ?
    odczytaj zawartosci plikow do buforow, kazdy bufor przypada na 1 plik i zachowaj te zawartosci w twoim sofcie oraz nazwy plikow, nastepnie przy wypakowywaniu laduj dane do odpowiednich plikow, dobrze bedzie utowrzyc jakies struktury przypadajace to danego pliku. Wlasnie poswiecilem ci moj projekt.


    ps do zmniejszenia rozmiaru plikow uzyj szyfrowania, jest duzo opisanych w sieci, nie musza to byc zaawansowane, najprostsze wystarcza.
    Ostatnio edytowane przez g3t_d0wn : 12-30-2009 - 16:59

  6. #6
    Zarejestrowany
    Dec 2009
    Postów
    5

    Domyślnie

    ntoskrnl jakich powinienem użyć bibliotek kompilując twój kod?
    Kompilator zwraca mi wiele błędów:
    error C2065: 'RCDATA' : undeclared identifier
    error C2065: 'RSRC_01' : undeclared identifier
    error C2065: 'RSRC_0X' : undeclared identifier
    error C2065: 'hFile' : undeclared identifier
    error C2065: 'hFile' : undeclared identifier
    error C2065: 'filePtr' : undeclared identifier
    error C2065: 'filePtr' : undeclared identifier
    error C2065: 'RCDATA' : undeclared identifier
    error C2065: 'RSRC_01' : undeclared identifier
    error C2065: 'RSRC_0X' : undeclared identifier
    error C2065: 'hFile' : undeclared identifier
    error C2065: 'hFile' : undeclared identifier
    error C2065: 'filePtr' : undeclared identifier
    error C2065: 'filePtr' : undeclared identifier
    Te dane nie są nigdzie wcześniej deklarowane ani nic nie ma o nich w google.
    Więc nie wiem co trzeba zrobić.

  7. #7
    Zarejestrowany
    Dec 2009
    Postów
    11

    Domyślnie

    Zamiast RCDATA powinno byc RT_RCDATA - moj blad a stala ta zdefiniowana jest w pliku winuser.h. RSRC_01 i RSRC_0X to zmyslone etykiety identyfikatorow dodanych zasobow - nie mam pojecia jakie sa identyfikatory twoich zasobow musisz to sprawdzic w pliku o rozszerzeniu rc. Pozostale typy to:

    HANDLE hFile;
    PCHAR filePtr;

Podobne wątki

  1. Perl - funkcja reverse
    By kokosoko in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 6
    Autor: 03-07-2009, 15:47
  2. shellcode z funkcja system
    By oneat in forum Assembler
    Odpowiedzi: 5
    Autor: 02-26-2009, 20:24
  3. neibezpieczne dzialanie funkcja sleep() w PHP
    By gogulas in forum Security
    Odpowiedzi: 15
    Autor: 05-28-2008, 00:07
  4. blad w skrypcie, funkcja str_replace()
    By gogulas in forum PHP/CGI/ASP/JSP/J2EE
    Odpowiedzi: 1
    Autor: 03-22-2008, 20:37
  5. Excel - funkcja BAHTTEXT
    By northdakota in forum Windows
    Odpowiedzi: 0
    Autor: 01-17-2008, 18:39

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj