Нужен ли afxres.h, если я не использую MFC? Как мне удалить его из скрипта.RC?

Я не знаю сценарии RC.

Я хочу включить метаданные версии продукта, версии файла и т. Д. В библиотеку, которую я создаю. Я использую файл.rc, чтобы сделать это. Сборка управляется make-файлом. Я следую вместе с примером.rc scrpit, который я нашел.

Файл шаблона.rc включает afxres.h, но я не думаю, что мне это нужно. Но если я просто удаляю его, я получаю кучу ошибок компиляции.

Как выглядит базовый, не MFC RC скрипт? Могу ли я удалить все вещи, как это:

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

....

3 ответа

Решение

Мой ответ:
Нет, мне не нужно все это дерьмо. Вот сценарий RC, который работает для VERSIONINFO.

#define VER_FILEVERSION          1,2,3,4
#define VER_FILEVERSION_STR      "1.2.3.4"
#define VER_PRODUCTVERSION       1,2,0,0
#define VER_PRODUCTVERSION_STR   "1.2.0.0"

// -------------------------------------------------------

VS_VERSION_INFO VERSIONINFO
 FILEVERSION            VER_FILEVERSION
 PRODUCTVERSION         VER_PRODUCTVERSION
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
    BLOCK "040904b0"
    BEGIN
    VALUE "CompanyName",      "Company X"
    VALUE "FileDescription",  "Description Goes Here"
    VALUE "InternalName",     "NotSure"
    VALUE "LegalCopyright",   "Copyright (C) 2009 Your Name Here"
    VALUE "OriginalFilename", "DllName.dll"
    VALUE "ProductName",      "Product Title"
    VALUE "FileVersion",      VER_FILEVERSION_STR
    VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
    END
END
BLOCK "VarFileInfo"
BEGIN
    VALUE "Translation", 0x409, 1200
END
END

Обоснуйте это с:

$(WindowsSDK)\bin\RC.exe /FoProjectName.res ProjectName.rc

У меня была похожая проблема при попытке компиляции без MFC. Решение Cheeso не будет работать адекватно для меня.

Все скомпилировано нормально, и я не видел ошибок / предупреждений во время сборки. Иконка, которая была определена в моем файле ресурсов, была правильно показана в "проводнике Windows". Однако данные о версии не были доступны. (Это видно при щелчке правой кнопкой мыши по исполняемому файлу и свойствам выбора. В этом случае вкладка "версия" отсутствовала.)

Чтобы это работало, мне нужно было добавить следующее включение в начало файла.rc:

#include <windows.h>

С этим изменением вкладка версии будет отображаться в свойствах исполняемого файла. Кроме того, класс.NET System.Diagnostics.FileVersionInfo теперь может получать информацию о версии, хотя раньше это не работало.

По умолчанию "stdafx.h" будет включать "windows.h". Я не уверен, почему требуется windows.h, но в моем случае это имеет значение.

Редактировать: Добавлена ​​более конкретная информация в ответ на Cheeso.

Я получил ту же ошибку при обновлении RBTray проекта в VS2019.

После изменения afxres.h к winres.h (как в примере проекта VS2019 WinApp .rc файл), компиляция прошла успешно.

Другие вопросы по тегам