Чем создавать res-файлы?

Если вы создаете софт под Windows, то наверняка сталкивались с файлами *.res – это бинарный формат ресурсов, который используется тулчейном от Microsoft. Такие файлы прилинковываются с программным кодом для встраивания в экзешник иконок, курсоров, а также информации о версии приложения и авторских правах. Утилита для компиляции ресурсных файлов (RC) входит в состав MSVS, но если вы по тем или иным причинам не хотите ее использовать, то вас ждет, мягко говоря, увлекательное приключение – какого-то стандартного общепринятого способа компилировать ресурсы нет.

Странно, что никто до сих пор не создал универсальный res-компилятор для любых языков – хотя свои компиляторы разной степени удобства включены во многие IDE и тулчейны. Например, в GNU Binutils есть для этого программа windres. Но чтобы ее использовать, вам, естественно, придется целиком установить виндовый порт GCC, например TDM-GCC или Winlibs, а это “могут не только лишь все”, да и держать у себя такой громоздкий пакет ради одной утилиты как-то жирно. Я решил найти альтернативу, что-то простое и независимое – и вот вам на выбор два кандидата.

GoRC

http://www.godevtool.com/ResourceFrame.htm

К языку Go никакого отношения не имеет) Это freeware-компилятор res-файлов с синтаксисом, являющимся надмножеством RC от Microsoft. Поддерживает x64. Минимальный исходник для задания иконки приложения выглядит так:

100 ICON "app.ico"

Полученный файл можно включить в DUB-проект:

"sourceFiles-windows": ["resource.res"]

rcedit

https://github.com/electron/rcedit

Утилита от разработчиков Electron. Это не компилятор ресурсов – rcedit работает с экзешниками напрямую и позволяет добавить иконку или манифест уже собранному приложению. Очень удобно, если ваш язык не поддерживает линкинг ресурсов. Или, например, если вы используете какой-то готовый движок или рантайм, который не собираете самостоятельно (как, собственно, тот же Electron). Можно присобачить rcedit к DUB-проекту следующим образом:

"postBuildCommands-windows": [
    "$PACKAGE_DIR\\rcedit \"app.exe\" --set-file-version \"1.0.0.0\" --set-product-version \"1.0.0\" --set-icon \"$PACKAGE_DIR\\icon.ico\""
]

Обновления

Вышли небольшие обновления моих биндингов: bindbc-wgpu 0.19.1, bindbc-newton 0.3.1, bindbc-soloud 0.1.4. Все биндинги теперь используют bindbc-loader 1.1.

dlib достиг очередной рекордной отметки в 6000 скачиваний в месяц – это уже 4 место в каталоге DUB.

В Dagon добавлена базовая функциональность для переключения сцен: к выходу следующей версии опубликую пример, реализующий главное меню на ImGui с возможностью задавать настройки игры. Также Dagon теперь использует актуальные версии bindbc-opengl и bindbc-sdl.

Обновления

Обновил битые ссылки на статьи по dlib в блоге LHS – у блога сменился домен на blog.lhs.su. Также решил постепенно выложить здесь все свои гостевые статьи оттуда.

Обновил сайты Dagon и dlib: https://gecko0307.github.io/dagon/, https://gecko0307.github.io/dlib/. Также все примеры Dagon теперь используют версию 0.16.0.

dlib бьет очередной рекорд по скачиваниям – 3400 в месяц, что выводит библиотеку на 6 место в каталоге DUB с рейтингом 5.0.

В Dagon появилась функция для управления кадровой частотой – Cadencer.setFrequency, а также хелперы для автоматической адаптации кадровой частоты к частоте обновления экрана: Application.displayRefreshRate, Application.frequencyToRefreshRate.

Обновления

dlib 1.3.0

Вышла новая версия dlib. В библиотеке появился новый пакет dlib.math.random с реализацией генератора псевдослучайных чисел на основе C-функции rand. Проделан ряд улучшений в математическом пакете: добавлена поддержка компилятора GDC в модуль dlib.math.sse, появилась новая функция интерполяции bezierQuadratic.

Количество скачиваний dlib в реестре DUB достигло 1400 в месяц – рекордный показатель за все время существования проекта!

Подготовка к релизу Dagon 0.16

Новая версия Dagon планируется к выпуску совсем скоро – на днях внес ряд багфиксов и улучшений в физику Newton (в частности, исправлен прыжок контроллера персонажа на плоских поверхностях), а также добавил встроенную функцию создания скриншотов – Application.takeScreenshot.

Const-корректность в D

Выложил новую статью на Medium – “Const-correctness in D”, посвященную особенностям квалификаторов const, immutable и inout. Будет полезна тем, кто хочет писать на D многопоточные или асинхронные приложения с разграничением доступа.

Начинающим изучать язык также пригодится статья “Getting started with D”, в которой пошагово описывается процесс инициализации минимального DUB-проекта.