2009-10-15 6 views
7

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

Я хочу включить версию продукта, версию файла и т. Д. Метаданные в DLL, которую я создаю. Я использую файл .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 

.... 

ответ

2

Мой ответ:
НЕТ, мне не нужно все это дерьмо. Вот сценарий 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 

Conmpile с ним:

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

Вы можете редактировать файл ресурсов, который вам нравится. Преимущество, заключающееся в том, что вы оставляете только те строки, которые вы удаляете самостоятельно, - это возможность автоматически редактировать его с помощью редактора ресурсов. Если вы посмотрите внимательно, вы увидите, что вторая ссылка на afxres.h восстанавливает первый, когда файл регенерируется. Поэтому замените обе ссылки на afxres.h с помощью windows.h (поскольку вы не используете MFC), и проблема будет решена. – shipr

5

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

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

Чтобы получить его работу, я должен был добавить следующее в верхней части окна. rc file:

#include <windows.h> 

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

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

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

+0

Вы говорите, что rc.exe не удалось скомпилировать rc-скрипт без включенного файла? Какой символ не был определен? Как это случилось? – Cheeso