C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




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