Замена ресурсов в 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;
}
|