zoukankan      html  css  js  c++  java
  • 【PE】Windows资源文件rc定义和使用

    Date: 2018.6.23


    1、参考

    http://lengbingteng-163-com.iteye.com/blog/1679204
    https://blog.csdn.net/peterlin666/article/details/38582601

    2、资源文件的定义和格式

    统一资源管理:
    在win32编程中,为方便项目中的资源统一管理,提供了一个格式统一的资源文件.rc,对各种资源进行管理。它的扩展名是.rc,在程序编译时它会被资源编译器编译生成一个.res的二进制文件。

    rc文件的语法:

    1.注释:注释方式和 C 语言相通,单行注释用 // 符号,多行注释用 /* … */ 符号。

    2.预处理命令:预处理指令包括一些头文件的引用(使用 #include ,也同 C 语言)。

    3.编译指令:预定义(#define,常量和宏,不支持带参数的宏) 和 条件编译(#if, #ifdef, #undef, #ifndef, #else, #elif, #endif 等)。

    4.资源定义声明:资源定义的声明中包括“资源”(Resources),”控件”(Controls) 和 “声明”(Statements) 3 类。

    “资源”具有资源 ID,在程序中可以使用 FindResource ,LoadResource,LoadMenu 等资源相关 API 来操作。常见的定义如下:
    (1). 从文件导入的资源类型:(BITMAP,ICON,HTML,FONT,CURSOR 等)
    (2). 对话框资源类型:(DIALOG,DIALOGEX 等)(对话框可以包括若干子控件,如菜单,按钮等,定义语法如下)
    (3). 菜单资源类型:
    (4). 字符串表类型:
    我们常用的是字符串表类型和对话框类型。
    下面是字符串表类型:

    1 VERSIONINFO  
    FILEVERSION    0,1,22,33  
    PRODUCTVERSION 1,0,0,0  
    FILEFLAGS 0x1L  
    FILEOS 0x40004L  
    FILETYPE 0x1L  
    FILESUBTYPE 0x1L  
    BEGIN  
       BLOCK "StringFileInfo"  
       BEGIN   
         BLOCK "080904E4"  
         BEGIN  
        VALUE "CompanyName", "My Company Name"  
        VALUE "FileDescription", "My excellent application"  
        VALUE "FileVersion", "6000"  
        VALUE "InternalName", "my_app"  
        VALUE "LegalCopyright", "My Name"  
        VALUE "OriginalFilename", "my_app.exe"  
        VALUE "ProductName", "My App"  
        VALUE "ProductVersion", "6000"  
         END  
       END  
       BLOCK "VarFileInfo"  
       BEGIN  
          VALUE "Translation", 0x809, 1252  
       END
    3、资源文件的使用:

    为windows可执行文件或动态链接库dll添加版本或文件信息:
    https://blog.csdn.net/SoaringLee_fighting/article/details/78067493

    注意事项:

    1、静态库lib文件中无法包含资源文件;
    2、动态库dll或可执行文件exe中只能包含一个资源文件。

    MSDN上解释如下:If you add an rc file to a static library, you may experience difficulties due to the limitation that only one rc file may be present in a Dll or Exe.
    This problem may be overcome by including the library’s .rc file into the parent project’s .rc file.

    4、VS工程中为dll或exe配置添加版本信息

    动态库属性中带svn相关信息:

    在工程属性中配置–》生成事件—》预先生成事件中 配置命令行如下:

    if exist ../.svn SubWCRev.exe ../ ../config/dec_dll.t ../dec_dll.rc
    if exist ../.svn SubWCRev.exe ../ ../config/svn_rev.t ../svnrev.h

    SubWCRev.exe是SVN中的命令,主要是获取svn上的相关信息,替换dec_dll.t或svn_rev.t中的WCREV,WCNOW 宏为当前svn版本的对应值。

    通过VS工程中的资源编译器和链接器,将资源文件信息编译连接到dll或exe中!

    OK!


  • 相关阅读:
    Java 获取本机IP
    IDEA2017.3.1破解激活
    java访问https绕过证书信任
    windows版nginx+ftp实现图片服务器的搭建
    json转字符串,json转list,json转pojo的工具类
    文件上传到ftp服务工具类
    一个servlet处理多个功能
    一二级栏目的查询
    后台接收URL地址的参数
    SSH邮箱验证与激活
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532436.html
Copyright © 2011-2022 走看看