在VC工程中添加多个RC文件
rc2里面的格式跟普通的rc是一样的文本格式,直接手工修改,也可以用VS打开修改.
有时需要把VC_Project2工程的资源合到VC_Project1工程的资源中(*.rc文件), 通常的做法就是用文本的方式打开VC_Project2.rc和VC_Project1.rc然后人工的判断拷贝粘贴了。
其实我们可以直接把VC_Project2.rc文件添加到VC_Project1工程中, 但此时编译可能会报下面错误
1>CVTRES : fatal error CVT1100: 重复的资源。type:VERSION, name:1, language:0x0804
1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
这个错误的意思就是资源定义重复了,其实重复也很正常,因为在创建VC_Project1和VC_Project2两个工程时,很多代码都是VC自动生成的,通常这些自动生成的代码就是产生这个错误的原因了。
解决办法就是把其中一个(那肯定是后来添加进来的那一个了)(这里是VC_Project2.rc)rc文件中与工程本身的rc(这里是VC_Project1.rc)文件相同的部分删掉即可。
还要注意的是移了VC_Project2.rc文件过来, 必须要把VC_Project2工程中对应的cpp和h文件还有最重要的一个是VC_Project2工程的resource.h文件也要移到VC_Project1工程中。
例子:
具体步骤如下:
1. 分别创建了TryRC和TryRC2的基于对话框的VC工程。
并在TryRC2工程中添加了对话框 ID是IDC_DIALOG1, IDC_DIALOG1中添加了一个按钮IDC_BUTTON1, IDC_DIALOG1绑定到CDlgR类中,两个文件分别是DlgR.cpp和DlgR.h
2. 看对比TryRC.rc和TryRC2.rc文件的内容
TryRC.rc(TryRC2.rc和TryRC.rc内容基本一致,只是多了一个IDC_DIALOG1)
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/
#undef APSTUDIO_READONLY_SYMBOLS
/
// 中文(中华人民共和国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h/0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""/r/n"
"/0"
END
3 TEXTINCLUDE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES/r/n"
"#define _AFX_NO_OLE_RESOURCES/r/n"
"#define _AFX_NO_TRACKER_RESOURCES/r/n"
"#define _AFX_NO_PROPERTY_RESOURCES/r/n"
"/r/n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)/r/n"
"LANGUAGE 4, 2/r/n"
"#pragma code_page(936)/r/n"
"#include ""res//TryRC.rc2"" // 非Microsoft Visual C++ 编辑的资源/r/n"
"#include ""afxres.rc"" // 标准组件/r/n"
"#endif/r/n"
"/0"
END
#endif // APSTUDIO_INVOKED