Надо ли освобождать что нибудь после LockResource

Тема в разделе "WASM.BEGINNERS", создана пользователем strange2007, 10 ноя 2011.

  1. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Подскажите по теме. И если да, то чем освобождать. Если GlobalUnlock, то что передавать ему?
    спасибо
     
  2. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Не надо.
     
  3. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Хм, я так и прочитал. Просто думал, что система как-то динамически загружает-выгружает эти ресурсы.
    Спасибо, что развеяли мои опасения
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Код (Text):
    1. LPVOID
    2. WINAPI
    3. LockResource(
    4.     HGLOBAL hResData
    5.     )
    6. {
    7.     return( (LPVOID)hResData );
    8. }
     
  5. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    И? Я это видел. Просто думал, что ось выделяет память под ресурс, подгружает его и ждет, когда все освободят
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    strange2007
    Да-да. Так и есть. Ведь ключевое слово return в C — настолько мощное средство, что само по себе позволяет не только выделить память, но ещё повысить привилегии, загрузить драйвер, а также переслать произвольные данные по протоколу HTTPS.
     
  7. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    :) шутник, блин. Просто перед LockResource есть еще и LoadResource. Логично предположить, что система не грузит все ресурсы в память. Соответственно после освобождения ресурса всеми процессами, логичнее всего выгружать ресурс. Разве я не прав?
    Как минимум, если бы я делал ось, то предусмотрел именно такой вариант, а то найдутся трупроги, которые в ресурс запихают 2 видеофильма
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    strange2007
    И что? Что можно освобождать, если LockResource ничего не делает?
    По секрету скажу, что ресурсы находятся в секции ресурсов, которая, как часть образа, целиком грузится в память в момент создания процесса. Так что все ресурсы уже загружены в память независимо от того, будет ли вообще вызвана какая-либо функция работы с ресурсами (будь то FindResource, LoadResource или LockResource). А LoadResource всего лишь получает указатель на соответствующие данные внутри уже загруженной секции ресурсов.
    Во-первых, что значит "всеми процессами"? Ресурсы относятся только к одному процессу.
    Во-вторых, что Вы понимаете под освобождением ресурса? FreeResource точно так же ничего не делает, как и LockResource. Реальное освобождение памяти используется только для специальных видов ресурсов (меню, иконки и т.п.), и то не всегда.
     
  9. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Да ладно, я же не настаиваю. Просто предположил и не более
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    strange2007
    В мсдн про Load\Lock\FreeResource черным по белому сказано, что вся эта ботва с типом HGLOBAL и Lock\Free тянется только для обратной совместимости c древними 16-битными версиями винды, и что LockResource ничего реально не лочит и соотв-но не требует никакого разлочивания\освобождения
     
  11. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Если бы я умел читать мсдн... Там же все по нерусски