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
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON "res\\TryRC.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "關于TryRC"
FONT 9, "宋體", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
LTEXT "TryRC 1.0 版",IDC_STATIC,40,10,119,8,SS_NOPREFIX
LTEXT "Copyright (C) 2010",IDC_STATIC,40,25,119,8
DEFPUSHBUTTON "確定",IDOK,178,7,50,16,WS_GROUP
END
IDD_TRYRC_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "TryRC"
FONT 9, "宋體", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "確定",IDOK,263,7,50,16
PUSHBUTTON "取消",IDCANCEL,263,25,50,16
CTEXT "TODO: 在此放置對話框控件。",IDC_STATIC,10,96,300,8
PUSHBUTTON "Button1",IDC_BUTTON1,7,7,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
// 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 "080403a8"
BEGIN
VALUE "CompanyName", "TODO: <公司名>"
VALUE "FileDescription", "TODO: <文件說明>"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "TryRC.exe"
VALUE "LegalCopyright", "TODO: (C) <公司名>。保留所有權利。"
VALUE "OriginalFilename", "TryRC.exe"
VALUE "ProductName", "TODO: <產品名>"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 936
END
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 228
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
IDD_TRYRC_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 313
TOPMARGIN, 7
BOTTOMMARGIN, 193
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_ABOUTBOX "關于TryRC(&A)..."
END
#endif // 中文(中華人民共和國) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2
#pragma code_page(936)
#include "res\TryRC.rc2" // 非Microsoft Visual C++ 編輯的資源
#include "afxres.rc" // 標準組件
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3. 把TryRC2工程中的TryRC2.rc, DlgR.cpp, DlgR.h和resource.h添加到TryRC工程中,由于TryRC2工程resource.h與TryRC工程resource.h同名(也要注意其他文件的同名情況),所以我把TryRC2工程resource.h改名為resource1.h(如果不把他們放在同一個目錄應該就不用改名了)
4. 此時編譯就會報上面說到的錯誤了。
所以在這里就要修改TryRC2.rc文件, 修改后的文件如下:
// Microsoft Visual C++ generated resource script.
//
#include "resource1.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
"resource1.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\\TryRC2.rc2"" // 非Microsoft Visual C++ 編輯的資源\r\n"
"#include ""afxres.rc"" // 標準組件\r\n"
"#endif\r\n"
"\0"
"\r\n"
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
//-IDR_MAINFRAME ICON "res\\TryRC2.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
//-------------------------------------------------------------------------//
//-----About對話框, 這些就是與TryRC.rc重復的了---------------------------//
//IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
//STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
//CAPTION "關于TryRC2"
//FONT 9, "宋體", 0, 0, 0x1
//BEGIN
// ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
// LTEXT "TryRC2 1.0 版",IDC_STATIC,40,10,119,8,SS_NOPREFIX
// LTEXT "Copyright (C) 2010",IDC_STATIC,40,25,119,8
// DEFPUSHBUTTON "確定",IDOK,178,7,50,16,WS_GROUP
//END
//-------------------------------------------------------------------------//
//-----這個是TryRC2工程的主對話框,不包進來--------------------------------//
//IDD_TRYRC2_DIALOG DIALOGEX 0, 0, 320, 200
//STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
//EXSTYLE WS_EX_APPWINDOW
//CAPTION "TryRC2"
//FONT 9, "宋體", 0, 0, 0x1
//BEGIN
// DEFPUSHBUTTON "確定",IDOK,263,7,50,16
// PUSHBUTTON "取消",IDCANCEL,263,25,50,16
// CTEXT "TODO: 在此放置對話框控件。",IDC_STATIC,10,96,300,8
//END
//----------------------------------------------------------------------------//
IDD_DIALOG1 DIALOGEX 0, 0, 313, 142
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "確定",IDOK,61,121,50,14
PUSHBUTTON "取消",IDCANCEL,197,121,50,14
PUSHBUTTON "Button1",IDC_BUTTON1,39,46,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
// 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 "080403a8"
// BEGIN
// VALUE "CompanyName", "TODO: <公司名>"
// VALUE "FileDescription", "TODO: <文件說明>"
// VALUE "FileVersion", "1.0.0.1"
// VALUE "InternalName", "TryRC2.exe"
// VALUE "LegalCopyright", "TODO: (C) <公司名>。保留所有權利。"
// VALUE "OriginalFilename", "TryRC2.exe"
// VALUE "ProductName", "TODO: <產品名>"
// VALUE "ProductVersion", "1.0.0.1"
// END
// END
// BLOCK "VarFileInfo"
// BEGIN
// VALUE "Translation", 0x804, 936
// END
//END
//-------------------------------------------------------------------------//
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
//------------------------------------------------------------//
//-----------------刪掉刪掉刪掉------------------------------//
//IDD_ABOUTBOX, DIALOG
//BEGIN
// LEFTMARGIN, 7
// RIGHTMARGIN, 228
// TOPMARGIN, 7
// BOTTOMMARGIN, 48
//END
//IDD_TRYRC2_DIALOG, DIALOG
//BEGIN
// LEFTMARGIN, 7
// RIGHTMARGIN, 313
// TOPMARGIN, 7
// BOTTOMMARGIN, 193
//END
//------------------------------------------------------------//
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 306
TOPMARGIN, 7
BOTTOMMARGIN, 135
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
//STRINGTABLE
//BEGIN
// IDS_ABOUTBOX "關于TryRC2(&A)..."
//END
#endif // 中文(中華人民共和國) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
//-------------------------------------------------------------------------//
//------------------ 不刪除會有錯誤----------------------------------------//
// Generated from the TEXTINCLUDE 3 resource.
//
//#define _AFX_NO_SPLITTER_RESOURCES
//#define _AFX_NO_OLE_RESOURCES
//#define _AFX_NO_TRACKER_RESOURCES
//#define _AFX_NO_PROPERTY_RESOURCES
//#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
//LANGUAGE 4, 2
//#pragma code_page(936)
//#include "res\TryRC2.rc2" // 非Microsoft Visual C++ 編輯的資源
//#include "afxres.rc" // 標準組件
//#endif
// 這里有一個TryRC2.rc2暫時不清楚它有什么用
//--------------------------------------------------------------------------//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
5. 在DlgR.h中添加該語句 #include "resource1.h"
這樣子包含不是很好,一修改resource1.h就要編譯DlgR.h和DlgR.cpp了
暫時沒有解決辦法。
6. 總結:其實這樣子添加多個RC文件到工程的修改和拷貝粘貼RC文件差不多, 只是在工程的結構上比較明了一點,感覺也是比拷貝粘貼RC文件好。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/cay22/archive/2010/05/26/5625951.aspx