Windows 如果我不使用MFC,我是否需要afxres.h?如何从.RC脚本中删除它?

Windows 如果我不使用MFC,我是否需要afxres.h?如何从.RC脚本中删除它?,windows,resources,versioninfo,afx,rc.exe,Windows,Resources,Versioninfo,Afx,Rc.exe,我不知道RC脚本 我想将产品版本、文件版本等元数据包含到我正在构建的DLL中。我使用的是一个.rc文件。构建是makefile驱动的。下面是我找到的一个示例.rc scrpit template.rc文件包括afxres.h,但我认为我不需要它。但是如果我只是删除它,我会得到一堆编译错误 基本的非MFC RC脚本是什么样子的?我可以移除所有像这样的东西吗: //////////////////////////////////////////////////////////////////////

我不知道RC脚本

我想将产品版本、文件版本等元数据包含到我正在构建的DLL中。我使用的是一个.rc文件。构建是makefile驱动的。下面是我找到的一个示例.rc scrpit

template.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

....
我的回答是:
不,我不需要那些废话。下面是一个适用于VERSIONINFO的RC脚本

#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:

#include <windows.h>
#包括
通过此更改,版本选项卡将显示在可执行文件的属性中。另外,.NET System.Diagnostics.FileVersionInfo类现在能够获取版本信息,而这在以前是不起作用的

默认情况下,“stdafx.h”将包括“windows.h”。我不确定为什么需要windows.h,但在我的情况下,它似乎起了作用


编辑:添加了一些更具体的信息,以响应Cheeso。

您是说rc.exe在没有包含该文件的情况下无法编译rc脚本吗?什么符号没有定义?它是怎么失败的?这应该是公认的答案,工作起来很有魅力。谢谢您可以随意编辑资源文件。保留删除的行的优点是能够使用资源编辑器自动编辑它。如果仔细观察,您会发现在重新生成文件时,对afxres.h的第二个引用将重建第一个引用。因此,将对afxres.h的两个引用都替换为windows.h(因为您没有使用MFC),问题就会得到解决。