Пример ниже копирует ресурс диалогового окна из одного исполняемого файла, 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."); } |