zoukankan      html  css  js  c++  java
  • 资源编译器 (.rc) 文件

    转自:http://blog.csdn.net/timmy_zhou/article/details/5912524


    rc文件VS_VERSION_INFO中 FILEVERSION 键的值每段不能超过255,切记

    您可以编写程序来修改资源编译器 (.rc) 文件,而不是使用此处所述的步骤。但是,RC 文件是 Visual c + + 的控制之下。visual c + + 修改 RC 文件,在保存时,这可能会影响版本资源。本节中介绍的方法可应用于任何 Visual c + + 项目。此示例使用 Microsoft 基础类项目。

    创建新的项目使用 MFC (EXE) Appwizard 并调用它 MyProject。MyProject 必须包括 MyProject.rc2 的 MyProject.rc 文件。.rc2 文件旨在为用户定义的资源。请按照下列步骤以递增 MyProject 的每个版本后的版本信息:

    1. 版本资源删除.rc 文件并将其放置在.rc2 文件中:

      1. 在文本编辑器中打开 MyProject.rc 和 MyProject.rc2 (在分辨率文件夹中找到)。若要用于 Visual c + + 编辑器在 文件 菜单上单击 打开,然后选择为 MyProject.rc 文件在 打开方式 列表中的 文本
      2. 在 $ MyProject.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 0x4L
         FILETYPE 0x1L
         FILESUBTYPE 0x0L
        BEGIN
            BLOCK "StringFileInfo"
            BEGIN
                BLOCK "040904b0"
                BEGIN
                    VALUE "Comments", "Sample Application/0"
                    VALUE "CompanyName", "Microsoft Corp./0"
                    VALUE "FileDescription", "MyProject MFC Application/0"
                    VALUE "FileVersion", "1, 0, 0, 1/0"
                    VALUE "InternalName", "MyProject/0"
                    VALUE "LegalCopyright", "Copyright (C) 1999/0"
                    VALUE "OriginalFilename", "MyProject.EXE/0"
                    VALUE "ProductName", "MyProject Application/0"
                    VALUE "ProductVersion", "1, 0, 0, 1/0"
                END
            END
            BLOCK "VarFileInfo"
            BEGIN
                VALUE "Translation", 0x409, 1200
            END
        END
        							
      3. 从 MyProject.rc 文件剪切版本资源并将其粘贴到下面注释 MyProject.rc2 文件"的添加已手动编辑此处的资源"。有关在资源域中的每一个含义的信息,请参阅 VERSIONINFO 资源语句,在帮助中。
    2. 替换宏 FILEVER 和 PRODUCTVER FILEVERSION 和 PRODUCTVERSION 数据。同样,宏 STRFILEVER 和 STRPRODUCTVER 替换 FileVersion 和 ProductVersion 字符串数据。
    3. 添加一个 # VS_VERSION_INFO 资源语句前立即包括 VersionNo.h。现在看起来版本资源 (如:
      /////////////////////////////////////////////////////////////////////// 
      // 
      // Version
      // 
      #include "VersionNo.h"
      VS_VERSION_INFO VERSIONINFO
       FILEVERSION FILEVER
       PRODUCTVERSION PRODUCTVER
       FILEFLAGSMASK 0x3fL
      #ifdef _DEBUG
       FILEFLAGS 0x1L
      #else
       FILEFLAGS 0x0L
      #endif
       FILEOS 0x4L
       FILETYPE 0x1L
       FILESUBTYPE 0x0L
      BEGIN
          BLOCK "StringFileInfo"
          BEGIN
              BLOCK "040904b0"
              BEGIN
                  VALUE "Comments", "Sample Application/0"
                  VALUE "CompanyName", "Microsoft Corp./0"
                  VALUE "FileDescription", "MyProject MFC Application/0"
                  VALUE "FileVersion", STRFILEVER
                  VALUE "InternalName", "MyProject/0"
                  VALUE "LegalCopyright", "Copyright (C) 1997/0"
                  VALUE "OriginalFilename", "MyProject.EXE/0"
                  VALUE "ProductName", "MyProject Application/0"
                  VALUE "ProductVersion", STRPRODUCTVER
              END
          END
          BLOCK "VarFileInfo"
          BEGIN
              VALUE "Translation", 0x409, 1200
          END
      END
      					
    4. 创建您的项目所在的同一目录中名为 VersionNo.h 的头文件。此文件将包含下面的语句是第 2 步中使用的宏的定义:
      #define FILEVER        1,0,0,1
      #define PRODUCTVER     1,0,0,1
      #define STRFILEVER     "1, 0, 0, 1/0"
      #define STRPRODUCTVER  "1, 0, 0, 1/0"
      						
      注: 添加换行符和回车符返回最后一行的字符。

      现在,MyProject.rc 文件包括 MyProject.rc2,并 MyProject.rc2 文件包含 VersionNo.h。
    5. 使用 Visual Basic 脚本宏将被修改 VersionNo.h 文件内容。该宏如下所述的句柄 Visual c + + BuildFinish 事件以便它将不会触发生成完成之前。每次调用此 VB 脚本代码时, 它第一次将在头文件内部版本号递增按固定的数量,然后保存该文件,并将其关闭。在后续的生成过程中可执行文件中包含新的版本号。

      若要安装和使用 VB 脚本代码,请执行下列操作:

      1. 打开一个现有的 DSM (宏) 文件,或在 Visual c + + 中创建一个新的 DSM 文件。创建一个新的文件、 在 文件菜单上单击 新建,选择在 文件 选项卡上的 宏文件、 为其指定一个名称并单击 确定
      2. 将以下代码粘贴到 VB 脚本下面 (在 Visual c + + 中,不能安装一个空的 DSM 文件 ; 下一步介绍安装):
        Function GetProjectDir(FullName)
        
        'VC++ doesn't provide any method for getting the path of the active project
        'See the VB Script reference for more information on the VB Script functions 
        'used in this function
        
        Dim proj_path
        proj_path = Split(StrReverse(FullName),"/",-1,1)
        
        Dim count
        count = UBound(proj_path)
        
        Dim full_path
        full_path = ""
        Dim i
        
        for i = 1 to count 
        	full_path = full_path & "/" & proj_path(i)
        next
        
        GetProjectDir = StrReverse(full_path)
        
        End Function
        
        
        Sub ReplaceText(selection, count, incrementby)
        
        'selection represents the TextSelection object
        'count represents the position of the version number to be incremented
        'incrementby represents a number that will be added to the existing version number
        
        selection.WordRight dsMove, count
        selection.WordRight dsExtend, 1
        Dim str
        str = selection.Text
        str = str + incrementby
        
        selection.Text = str
        
        End Sub
        
        
        Sub Application_BuildFinish(numError, numWarning)
        
        'This event will be triggered after every build of a project
        'You can check numError and/or numWarning to determine if you want to continue
        'If numError <> 0 Then
            'exit sub
        'Obtain the full path of the active project
        Dim full_path
        full_path = GetProjectDir(ActiveProject.FullName)
        
        full_path = full_path & "versionno.h"
        
        'Open the VersionNo.h file
        Documents.Open full_path
        
        'Obtain the TextSelection object
        Dim selection
        set selection = ActiveDocument.Selection
        selection.StartOfDocument 
        
        'Increment the version information
        ReplaceText selection, 9, 1
        selection.LineDown
        selection.StartOfLine
        ReplaceText selection, 9, 1
        selection.LineDown
        selection.StartOfLine
        ReplaceText selection, 10, 1
        selection.LineDown
        selection.StartOfLine
        ReplaceText selection, 10, 1
        
        ActiveDocument.Save
        ActiveDocument.Close
         
        End Sub
        								
        注: 此代码是一个不受支持的示例。您可能会对其进行修改为您生成的方案。
      3. 如果尚未安装,请安装 DSM 文件。若要安装,单击 工具 菜单上的 自定义、 单击 加载项和宏文件 选项卡、 浏览以选择 DSM 文件,单击 关闭
    6. 从 生成 菜单中选择 生成 MyProject.exe。生成完成后,打开 VersionNo.h 文件。它将包含以下语句:
      #define FILEVER        1,0,0,2
      #define PRODUCTVER     1,0,0,2
      #define STRFILEVER     "1, 0, 0, 2/0"
      #define STRPRODUCTVER  "1, 0, 0, 2/0"
      						
      如果生成代码再次,在此版本信息包含在该可执行文件和版本信息就会增加。您可能会引入一些代码,在宏中前面所述,以防止递增的版本号,如果在生成产生错误。 

  • 相关阅读:
    lambba表达式
    根据某个字段筛选list数据
    git和idea绑定
    gitee创建仓库
    用 Python 3 + PyQt5 擼了一個可以播放“任意”音樂的播放器
    zabbix 共享内存设置
    Zabbix高可用,实现zabbix的无缝切换,无故障时间
    python练习题100
    斐波那契数列python实现
    随机生成指定位数密码包括大小写数字特殊符号
  • 原文地址:https://www.cnblogs.com/pamxy/p/2991496.html
Copyright © 2011-2022 走看看