Загрузка ресурсов RC_DATA

Тема в разделе "WASM.WIN32", создана пользователем Caesarus, 21 дек 2004.

  1. Caesarus

    Caesarus New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    16
    Имеется ехешник, из коророго я сделал ресурс типа RC_DATA. Гружу его методами:

    FindResource

    LoadResource.



    Вопрос: как мне сохранить ехе файл на диске, если я получаю корректно результат hGlobal от ф-ции LoadResource ?



    Спасибо!!
     
  2. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    hGlobal - это адрес где лежит екзешник в памяти.

    SizeofResource - даст тебе его размер,

    а потом юзай стандартные ф-ии работы с файлом
     
  3. Caesarus

    Caesarus New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    16
    И как юзать ф-ции для работы с файлами при помощи hGlobal? Приведи пример плз.
     
  4. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    вот на С:
    Код (Text):
    1.  
    2. HRSRC hResInfo = FindResource...
    3. HANDLE hGlobal = LoadResource...       
    4. DWORD dwSize = SizeofResource(GetModuleHandle(NULL), hResInfo);
    5. FILE *f = fopen("c:\\youfile.exe","wb");
    6. if(f)
    7. {
    8.     fwrite(hGlobal, dwSize , 1, f);
    9.     fclose(f);
    10. }
    11.  




    ессно подразумевается што у тебя не Windows 9x и выше :)
     
  5. Caesarus

    Caesarus New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    16
    Спасибо! Ща проверю...
     
  6. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    FILE* F = fopen("dump.bin", "wb");

    fwrite(hGlobal, 1, SizeofResource(hModule, hResInfo), F);

    fclose(F);
     
  7. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    Странно, а в МСДН пишут про LockResource. Я его и использую:


    Код (Text):
    1.  
    2. void *pdata;
    3. HRSRC hrsrc;
    4.  
    5. hrsrc = FindResource(NULL, (LPCSTR)IDR_SKIN1, "SKIN");
    6. pdata = LockResource(LoadResource(NULL, hrsrc)), SizeofResource(NULL, hrsrc));
    7.  
    8. // здесь идут манипуляции с pdata
    9.  
     
  8. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    А код этой самой LockResource посмотри в отладчике, обретёшь просветление :derisive:
     
  9. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    LockResource имел смысл на Win3.1, а щас он нужен тока шоб протекторы через него пугали молодых крякеров :)
     
  10. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    Да. Просветление происходит только на этом сайте.
     
  11. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    Хотя на этот счёт есть такая мысль:



    Если плевать на официальные доки и писать исходя из фактического положения вещей, то может оказаться, что, например, в Виндовс 2006 этому LockResource() придадут какой-нибудь другой смысл, и программа, отлично работающая в 98/NT не будет там работать.



    Что вы думаете по этому поводу?