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

在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文件好。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cay22/archive/2010/05/26/5625951.aspx

posted on 2011-05-18 10:05 wrh 阅读(5604) 评论(2)  编辑 收藏 引用

评论

# re: 在VC工程中添加多个RC文件(在VC2005编译通过) 2011-06-24 13:46 识字

我来逛逛,顺便帮博主顶一下,嘿嘿。  回复  更多评论   

# re: 在VC工程中添加多个RC文件(在VC2005编译通过) 2011-07-11 14:05 宁波废铁回收

我来逛逛,顺便帮博主顶一下,嘿嘿。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(19)

随笔档案

文章档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜