您的位置:首页 > 移动开发

在VC工程中添加多个RC文件(在VC2005编译通过)

2010-05-26 17:09 621 查看
在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
 
 
/////////////////////////////////////////////////////////////////////////////
//
// 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文件好。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息