Есть консольная программа с бинарными ресурсами (Windows). Нашел, как загружать, записывать в файл и так далее -
HMODULE hMod=GetModuleHandle(NULL);
if(!hMod) { /* Error */ }
HRSRC hRes=FindResource(hMod,"Data",RT_RCDATA);
if(!hRes) { /* Error */ }
HGLOBAL hGlob=LoadResource(hMod,hRes);
if(!hGlob) { /* Error */ }
char * array=(char *)LockResource(hGlob);
if(!array) { /* Error */ }
unsigned int dwFileSize=SizeofResource(hMod,hRes);
if(!dwFileSize) { /* Error */ }
Все работает. Но если я верно понимаю прочитанное, то этот ресурс остается в памяти до конца работы программы.
The pointer returned by LockResource is valid until the module containing the resource is unloaded. It is not necessary to unlock resources because the system automatically deletes them when the process that created them terminates.
А у меня их много, я потому и ресурсами их делал, чтоб в памяти не держать. А как его из памяти выгрузить, когда он больше не нужен? Ждать, когда программа завершится - не дело.
Windows автоматически управляет ресурсами, а выгружаются они при выгрузке модуля к которому относятся, это можно сделать функцией FreeLibrary
. Некоторые типы ресурсов требуют дополнительного явного внимания, подробности описаны здесь: Finding and Loading Resources. LockResource
же нужно использовать для того чтобы ресурс не был выгружен до конца работы с модулем, т.е. отключить автоматическую выгрузку.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
ЗдравствуйтеЕсть ли какие-нибудь существенные различия между такими определениями указателя:
Всем привет! Когда клиент отправляет серверу(или наоборот) буфер данных сделанное с помощью boost::asio::streambuf то данные как то смещаются и на выходе...
Пытался написать код на внедрение библиотеки в только что созданный процесс, но что-то не получаетсяФункция inject возвращает true, но сама библиотека...