简介:在version.inc通过预处理器宏单独维护中定义版本详细信息...如何将宏值包含到资源版本定义块中?
我的version.inc文件以UTF-8存储(例如纯ASCII).其完整内容如下(APS_此处的前缀与应用程序的真实名称相关,而不是.aps与资源编译器生成的文件相关):
#define APS_MAJORNUMBER 4
#define APS_MINORNUMBER 5
#define APS_BUILDNUMBER 0
#define APS_MODIFICATIONNUMBER 0
#define APS_BUILDEXT "wx"
#define APS_DATEYEAR 2012
#define APS_DATEMONTH 10
#define APS_DATEDAY 4
Run Code Online (Sandbox Code Playgroud)
app.rc与Visual Studio 2010相比,Visual Studio 2012 C++似乎对资源脚本文件()更加挑剔.我注意到的第一件事是,当手动编辑时,我必须保持UTF-16编码.你能证实吗?那有什么文件吗?
说app.rc看起来像这样的版本块:
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040504b0"
BEGIN
VALUE "CompanyName", "TODO: <Company name>"
VALUE "FileDescription", "TODO: <File description>"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "app.exe"
VALUE "LegalCopyright", "Copyright (C) 2012"
VALUE "OriginalFilename", "app.exe"
VALUE "ProductName", "TODO: <Product name>"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x405, 1200
END
END
Run Code Online (Sandbox Code Playgroud)
在早期版本的Visual Studio(2005和2010)中,我能够获得如下相关内容version.rc2:
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
#include "version.inc"
#define STR(value) #value
#define STRINGIZE(value) STR(value)
#define APS_FULLVERSION_STR \
STRINGIZE(APS_MAJORNUMBER) "." \
STRINGIZE(APS_MINORNUMBER) "." \
STRINGIZE(APS_BUILDNUMBER) "." \
STRINGIZE(APS_MODIFICATIONNUMBER)
VS_VERSION_INFO VERSIONINFO
FILEVERSION APS_MAJORNUMBER,APS_MINORNUMBER,APS_BUILDNUMBER,APS_MODIFICATIONNUMBER
PRODUCTVERSION APS_MAJORNUMBER,APS_MINORNUMBER,APS_BUILDNUMBER,APS_MODIFICATIONNUMBER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x29L
#else
FILEFLAGS 0x28L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "000004b0"
BEGIN
VALUE "Comments", "A fairly useful tool named APS"
VALUE "CompanyName", "The company name"
VALUE "FileDescription", "app"
VALUE "FileVersion", APS_FULLVERSION_STR
VALUE "InternalName", "aps"
VALUE "LegalCopyright", "Copyright © 1993-" STRINGIZE(APS_DATEYEAR)
VALUE "OriginalFilename", "app.exe"
VALUE "PrivateBuild", ""
VALUE "ProductName", "APS of the version 4"
VALUE "ProductVersion", APS_FULLVERSION_STR
VALUE "SpecialBuild", APS_BUILDEXT
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0, 1200
END
END
Run Code Online (Sandbox Code Playgroud)
然后将version.rc2其包含app.rc在app.rc手动编辑中.但是,我无法使用Visual Studio 2012项目和资源文件重复此过程.我可能会做一些我看不见的错误.这种方法是否也适用于Visual Studio 2012?
谢谢你的时间和经验,
切赫
pep*_*epr 12
以下是通过Visual Studio 2012(C++,IDE)完成此操作的方法.首先,它似乎所有的文件(app.rc,version.rc2与版本部分纳入app.rc,并且还version.inc带有单独维护的值[纳入version.rc2])必须存储在UTF-16 -不像早期版本的Visual Studio.然后我也能在Visual Studio 2012中重复相同的方法.
但是,您无需app.rc手动编辑文件.您可以使用IDE使用以下步骤:
App)并切换到" 资源视图"选项卡.App项目,展开它app.rc,然后展开Version文件夹.你可以看到这个VS_VERSION_INFO项目.VS_VERSION_INFO在键盘上标记项目并按下Delete键.该项目及其上层Version文件夹消失.app.rc文件夹,并选择资源包括....出现具有相同名称和三个输入窗格的对话框.
#include "version.rc2"那里写.(该文件不能有.rc扩展名,但是.rc2很好,并在MSDN文档的其他地方推荐.)app.rc).步骤的结果是您将看不到资源树中的Version文件夹和VS_VERSION_INFO项目(请参阅" 资源视图"选项卡); 但是,上面提到的构造Version部分(存储在其中version.rc2)被编译到应用程序资源中.
从技术上讲,app.rc在步骤之后可以找到文件的以下部分:
3 TEXTINCLUDE
BEGIN
"#include ""version.rc2""\r\n"
"\0"
END
Run Code Online (Sandbox Code Playgroud)
...
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#include "version.rc2"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
Run Code Online (Sandbox Code Playgroud)
任何有关增强该主题的建设性意见都是受欢迎的,并且会被+ 1-ed :)
祝你玩得愉快
切赫
| 归档时间: |
|
| 查看次数: |
13201 次 |
| 最近记录: |