【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!


原文地址:https://www.cnblogs.com/SoaringLee/p/10532436.html