天天看點

在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檔案好。

繼續閱讀