Вокруг ресурсов Windows встречаются четыре расширения файлов, и два из них похожи на два других. .rc и .res принадлежат одному миру, а .resx и .resources — другому. В этом руководстве объясняется, что представляет собой каждый из них, как создаётся и где в итоге оказывается.
Коротко
| Расширение | Мир | Форма | Текст или двоичный | Компилируется из | Попадает в |
|---|---|---|---|---|---|
.rc | Собственные Win32 | исходный скрипт | текст | пишется вручную | .res |
.res | Собственные Win32 | скомпилированный | двоичный | .rc | .exe или .dll |
.resx | .NET | исходный | текст (XML) | дизайнер или вручную | .resources |
.resources | .NET | скомпилированный | двоичный | .resx | сборка .NET |
Собственная сторона и сторона .NET — это параллельные конвейеры. Они не взаимозаменяемы, и ни один из них не является более новой версией другого.
Собственная сторона Win32
.rc - скрипт ресурсов
Файл .rc — это текстовый скрипт. Вы пишете его (или его создаёт инструмент), и он определяет ресурсы собственного приложения: диалоги, меню, таблицы строк, акселераторы, информацию о версии и ссылки на файлы иконок, растровых изображений, курсоров и манифестов. Это читаемая исходная форма. Во время работы программы .rc никто не загружает.
.res - скомпилированный файл ресурсов
Компилятор ресурсов превращает .rc в .res. Это двоичный файл, содержащий те же ресурсы в формате, который ожидает компоновщик. Это промежуточный артефакт сборки. В проекте Delphi его подключают с помощью {$R myresources.res}; компоновщик C или C++ принимает .res напрямую.
Ресурсы внутри .exe или .dll
Когда компоновщик создаёт итоговый двоичный файл, ресурсы из .res записываются в раздел ресурсов файла PE. Затем приложение обращается к ним во время работы через API Windows (FindResource, LoadResource, LoadString и другие). Resource Builder может открыть готовый .exe или .dll и редактировать эти ресурсы на месте, изменяя двоичный файл напрямую, без возврата к .rc и повторной компоновки.
Связанные типы собственных файлов
Вам также встретятся:
.dcr: ресурс компонента Delphi. Тот же двоичный формат, что и у.res; используется для хранения иконки компонента на палитре..drc: созданный Delphi скрипт ресурсов, текстовый аналог.rc, который может выдавать компилятор..manifest: файл XML, который становится ресурсомRT_MANIFESTв двоичном файле. Он объявляет такие вещи, как поддержка DPI и запрашиваемый уровень выполнения.
Сторона .NET
.resx - исходный файл ресурсов .NET
Файл .resx — это XML. Это исходная форма, используемая при разработке приложения .NET; он содержит строки, изображения, иконки и сериализованные объекты, каждая запись которых имеет имя. Обычно его редактируют в дизайнере ресурсов Visual Studio, хотя его можно редактировать и как обычный XML или в специальном редакторе.
.resources - скомпилированный файл ресурсов .NET
При сборке .resx превращается в двоичный файл .resources, который затем встраивается в скомпилированную сборку .NET как именованный поток. Во время работы приложение читает записи по имени через ResourceManager или ResourceReader.
Чем это отличается от собственной стороны
Ресурсы .NET имеют имена и типизируются как типы CLR (System.String, System.Drawing.Bitmap и так далее). Они не имеют отношения к собственным типам RT_ICON / RT_BITMAP / RT_STRING. Сборка .NET по-прежнему является файлом PE, поэтому она может также содержать собственные ресурсы: информация о версии, иконка приложения и манифест — это собственные ресурсы RT_*, полностью отдельные от потоков управляемых .resources внутри неё.
Как они связаны
Они работают параллельно:
.rc -> compile -> .res -> link -> resources in an .exe / .dll
.resx -> compile -> .resources -> embed -> a stream in a .NET assembly Есть один мост. Файл .resx или .resources можно преобразовать в собственный .res или .rc: записи растровых изображений, иконок и курсоров становятся настоящими ресурсами BITMAP, ICON и CURSOR , а каждая другая запись становится именованным блоком RCDATA . В обратном направлении осмысленного преобразования как операции над файлом не существует. См. Преобразование .resx в собственные ресурсы Win32.
Какой файл у вас есть и какой нужен
- У вас есть
.rc, и нужен двоичный файл для компоновки: скомпилируйте его в.res. - У вас есть
.resили.exe/.dll, и вы хотите посмотреть или изменить содержимое: откройте его в редакторе ресурсов. - У вас есть
.resx, а Visual Studio нет: редактируйте его напрямую. См. Редактирование файлов .resx и .resources без Visual Studio. - У вас есть двоичный файл
.resources, и вы хотите его прочитать: откройте его так же, как.resx. - Вы хотите узнать, что изменилось между двумя сборками или двумя файлами ресурсов: сравните их. См. Сравнение двух файлов EXE или DLL на различия в ресурсах.
Где подходит Resource Builder
Resource Builder открывает и редактирует все четыре формата, а также ресурсы внутри двоичных файлов .exe/.dll. Он компилирует .rc в .res, редактирует собственные ресурсы в двоичном файле на месте, открывает и сохраняет .resx и .resources и преобразует между формами .NET и собственными. Бесплатная 30-дневная пробная версия доступна на странице загрузки.