Обновление ресурсов

В следующем примере копируется ресурс диалогового окна поля из одного исполняемого файла, рук.EXE, в другой, ноги.EXE, выполнив следующие шаги:

  1. Использование функции LoadLibrary для загрузки исполняемого файла вручную.EXE.
  2. Используйте функции FindResource и LoadResource для обнаружения и загрузки ресурса поле диалогового окна.
  3. Используйте функцию LockResource для получения указателя на данных ресурсах диалогового окна.
  4. Используйте функцию BeginUpdateResource для открытия дескриптора обновление для ног.EXE.
  5. Используйте функцию UpdateResource для копирования ресурс поле диалогового окна из рук.EXE для ног.EXE.
  6. Для завершения обновления следует использовать функцию EndUpdateResource.

Следующий код реализует эти шаги.

HRSRC hResLoad;     / / обработать Загружаемый ресурс ДЕСКРИПТОРА hExe;        / / обработать к существующим.EXE-файл HRSRC hRes;         / / ручки/ptr. к res. информация. в hExe обработки hUpdateRes;  / / Обновление ресурсов дескриптор типа char * lpResLock;    / / указатель ресурса данных BOOL результат; 
 
/ / Загрузить.EXE-файл, который содержит диалоговое окно "", которые вы хотите скопировать. 
hExe = LoadLibrary("hand.exe"); 
 
Если (hExe == NULL) {ErrorHandler ("не удалось загрузить exe."); 
} / / Найдите ресурс поле диалогового окна в.EXE-файл. 
hRes = FindResource (hExe, «AboutBox», RT_DIALOG); 
 
Если (hRes == NULL) {ErrorHandler ("не удалось найти диалоговое окно""."); 
} / / Загрузить диалогового окна в глобальной памяти. 
hResLoad = LoadResource (hExe, hRes); 
 
Если (hResLoad == NULL) {ErrorHandler ("не удалось загрузить диалоговое окно""."); 
} / / Заблокировать диалогового окна в глобальной памяти. 
lpResLock = LockResource(hRes); 
 
Если (lpResLock == NULL) {ErrorHandler ("может не блокировки диалоговое."); 
} / / Открыть файл, к которому требуется добавить ресурс диалогового окна поле. 
hUpdateRes = BeginUpdateResource ("foot.exe", FALSE); 
 
Если (hUpdateRes == NULL) {ErrorHandler ("не удалось открыть файл для записи."); 
} / / Добавить ресурс поле диалогового окна в список обновлений. 
результат = UpdateResource (hUpdateRes, / / обновление ресурсов обработать RT_DIALOG, / / изменить ресурс диалогового окна окно «AboutBox», / / диалоговое окно имя MAKELANGID (LANG_NEUTRAL, SUBLANG_NEUTRAL) / / нейтральный язык
     lpResLock, / / ptr для ресурсов информация о SizeofResource (hExe, hRes)); / / Размер ресурсов информация. 
 
Если (результат == FALSE) {ErrorHandler ("не удалось добавить ресурс."); 
} / / Записывать изменения в ногу.EXE и затем закройте его. 
Если (!.EndUpdateResource (hUpdateRes, FALSE)) {ErrorHandler ("не удалось записать изменения в файл."); 
} / / Очистке. 
Если (!.FreeLibrary(hExe)) {ErrorHandler ("может не свободный исполняемый."); 
}