Замена ресурсов в exe, dll

Есть 2 DLL, в каждой есть по рисунку.
Задача: Надо сменить рисунок из DLL1 на рисунок из DLL2.
(Битмап в них:
#define BITMAP_2 2
BITMAP_2 BITMAP "test/ter1bu.bmp"
т.е. мне заранее известен ID битмапа, чем я и воспользовался)
А терь реализация:

Исходный код

int ChangeBitmap()
{
HINSTANCE hHandle = LoadLibrary ("D:\\Projects\\Tutorials\\Res\\ResUpdate.dll");
if (hHandle)
{
HRSRC hResLoad = FindResource (hHandle, MAKEINTRESOURCE (2), RT_BITMAP);
if (hResLoad == NULL)
{
AfxMessageBox("Не могу найти картинку.");
return 0;
}

HGLOBAL hResData = LoadResource (hHandle, hResLoad);
if (hResData == NULL)
{
AfxMessageBox("Не могу загрузить картинку.");
return 0;
}

LPVOID data = LockResource(hResData);
if (data == NULL)
{
AfxMessageBox("Не могу зафиксировать картинку в памяти.");
return 0;
}

HANDLE hUHandle = BeginUpdateResource ("D:\\Projects\\Tutorials\\Res\\Res.dll", false);
if (hUHandle == NULL)
{
AfxMessageBox ("Не могу открыть файл для записи.");
return 0;
}

BOOL result = UpdateResource (hUHandle, RT_BITMAP, MAKEINTRESOURCE (2), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), data,
SizeofResource (hHandle, hResLoad));
if (result == false)
{
AfxMessageBox ("Не могу добавить ресурс.");
return 0;
}

if (!EndUpdateResource(hUHandle, false)) AfxMessageBox ("Не могу записать изменения в файл.");

if (!FreeLibrary (hHandle)) AfxMessageBox ("Не могу освободить дескриптор.");
}

return 1;
}
 
Следующая статья »