Пример ниже копирует ресурс диалогового окна из одного исполняемого файла, Hand.exe, в другой, Foot.exe, следуя этими шагами:
Нижеследующий код реализует эти шаги.
| Обратите внимание! на то, что неправильное использование LoadLibrary может поставить под угрозу защиту вашего приложения, загружая неправильную DLL. Обратитесь к документации LoadLibrary за информацией о том, как правильно загружать DLLs в разных версиях Microsoft ® Windows ®. |
Демонстрационный пример
HRSRC hResLoad; // дескриптор загружаемого ресурса
HANDLE hExe; // дескриптор существующего .EXE файла
HRSRC hRes; // дескриптор/указатель на информ. о ресурсе в hExe
HANDLE hUpdateRes; // дескриптор корректировки ресурса
char *lpResLock; // указатель на данные ресурса
BOOL result;
// Загрузка .EXE файла, содержащего блок диалога,
// который вы хотите скопировать.
hExe = LoadLibrary("hand.exe");
if (hExe == NULL)
{
ErrorHandler("Could not load exe.");
}
// Определяем местонахождение ресурса диалогового окна
// в .EXE файле.
hRes = FindResource(hExe, "AboutBox", RT_DIALOG);
if (hRes == NULL)
{
ErrorHandler("Could not locate dialog box.");
}
// Загружаем диалоговое окно в глобальную память.
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL)
{
ErrorHandler("Could not load dialog box.");
}
// Определяем местонахождение диалогового
// окна в глобальной памяти.
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL)
{
ErrorHandler("Could not lock dialog box.");
}
// Открываем файл, в который хотим добавить
// ресурс диалогового окна.
hUpdateRes = BeginUpdateResource("foot.exe", FALSE);
if (hUpdateRes == NULL)
{
ErrorHandler("Could not open file for writing.");
}
// Добавляем ресурс диалогового окна в
// список обновления.
result = UpdateResource(hUpdateRes,// дескриптор обновляемого ресурса
RT_DIALOG, // изменение ресурса блока диалога
"AboutBox", // имя блока диалога
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),// неопределенный язык
lpResLock, // указатель на инф. о ресурсе
SizeofResource(hExe, hRes)); // размер инф. о ресурсе.
if (result == FALSE)
{
ErrorHandler("Could not add resource.");
}
// Записываем изменения в FOOT.EXE и затем закрываем его.
if (!EndUpdateResource(hUpdateRes, FALSE))
{
ErrorHandler("Could not write changes to file.");
}
// Очищаем.
if (!FreeLibrary(hExe))
{
ErrorHandler("Could not free executable.");
}
|