Хм, я так и прочитал. Просто думал, что система как-то динамически загружает-выгружает эти ресурсы. Спасибо, что развеяли мои опасения
И? Я это видел. Просто думал, что ось выделяет память под ресурс, подгружает его и ждет, когда все освободят
strange2007 Да-да. Так и есть. Ведь ключевое слово return в C — настолько мощное средство, что само по себе позволяет не только выделить память, но ещё повысить привилегии, загрузить драйвер, а также переслать произвольные данные по протоколу HTTPS.
шутник, блин. Просто перед LockResource есть еще и LoadResource. Логично предположить, что система не грузит все ресурсы в память. Соответственно после освобождения ресурса всеми процессами, логичнее всего выгружать ресурс. Разве я не прав? Как минимум, если бы я делал ось, то предусмотрел именно такой вариант, а то найдутся трупроги, которые в ресурс запихают 2 видеофильма
strange2007 И что? Что можно освобождать, если LockResource ничего не делает? По секрету скажу, что ресурсы находятся в секции ресурсов, которая, как часть образа, целиком грузится в память в момент создания процесса. Так что все ресурсы уже загружены в память независимо от того, будет ли вообще вызвана какая-либо функция работы с ресурсами (будь то FindResource, LoadResource или LockResource). А LoadResource всего лишь получает указатель на соответствующие данные внутри уже загруженной секции ресурсов. Во-первых, что значит "всеми процессами"? Ресурсы относятся только к одному процессу. Во-вторых, что Вы понимаете под освобождением ресурса? FreeResource точно так же ничего не делает, как и LockResource. Реальное освобождение памяти используется только для специальных видов ресурсов (меню, иконки и т.п.), и то не всегда.
strange2007 В мсдн про Load\Lock\FreeResource черным по белому сказано, что вся эта ботва с типом HGLOBAL и Lock\Free тянется только для обратной совместимости c древними 16-битными версиями винды, и что LockResource ничего реально не лочит и соотв-но не требует никакого разлочивания\освобождения