TN035: Visual C++에서 여러 개의 리소스 파일 및 헤더 파일 사용

참고 항목

다음 기술 노트는 온라인 설명서에 먼저 포함되어 있었으므로 업데이트되지 않았습니다. 따라서 일부 절차 및 항목은 만료되거나 올바르지 않을 수 있습니다. 최신 정보를 보려면 온라인 설명서 색인에서 관심 있는 항목을 검색하는 것이 좋습니다.

이 노트는 단일 프로젝트 또는 여러 프로젝트에서 공유되는 Visual C++ 리소스 편집기에서 여러 리소스 파일과 헤더 파일을 지원하는 방식과 이러한 지용을 활용하는 방법에 대해 설명합니다. 이 노트는 다음 질문에 대한 답변을 제공합니다.

  • 프로젝트를 여러 리소스 파일 및/또는 헤더 파일로 분할할 수 있는 경우와 작업을 수행하는 방법

  • .RC 파일 간에 공통 헤더 .H 파일을 공유하는 방법

  • 프로젝트 리소스를 여러 .RC 파일로 나누는 방법

  • 사용자(및 도구)가 파일 간의 .RC.CPP.H 빌드 종속성을 관리하는 방법

프로젝트에 추가 리소스 파일을 추가하는 경우 ClassWizard는 추가된 파일의 리소스를 인식하지 못합니다.

이 노트는 다음과 같은 구성으로 위의 질문에 대한 답변을 제공합니다.

  • Visual C++에서 리소스 파일 및 헤더 파일을 관리하는 방법에 대한 개요는 Visual C++의 리소스 집합 포함 명령을 통해 동일한 프로젝트에서 여러 리소스 파일 및 헤더 파일을 사용할 수 있는 방법에 대한 개요를 제공합니다.

  • AppWizard에서 만든 파일 및 .H 파일 분석은 AppWizard에서 만든 .RC 애플리케이션에서 사용하는 여러 리소스 및 헤더 파일을 확인합니다. 이러한 파일은 프로젝트에 추가할 추가 리소스 파일 및 헤더 파일의 좋은 모델이 됩니다.

  • 추가 헤더 파일을 포함하면 여러 헤더 파일을 포함할 수 있는 위치를 설명하고 이를 수행하는 방법을 자세히 설명합니다.

  • .RC 파일 간에 헤더 파일을 공유하면 다른 프로젝트의 여러 .RC 파일 또는 동일한 프로젝트에서 하나의 헤더 파일을 공유하는 방법이 표시됩니다.

  • 동일한 프로젝트에서 여러 리소스 파일을 사용하면 프로젝트를 여러 .RC 파일로 분리할 수 있는 위치를 설명하고 이를 수행하는 방법을 자세히 설명합니다.

  • 편집할 수 없는 Visual C++ 파일 의 적용은 Visual C++가 사용자 지정 리소스를 편집하고 의도치 않게 다시 포맷하지 않도록 하는 방법을 설명합니다.

  • 여러 Visual C++에서 편집한 .RC 파일이 공유하는 기호를 관리하면 여러 .RC 파일에서 동일한 기호를 공유하는 방법과 중복 ID 숫자 값을 할당하지 않는 방법을 설명합니다.

  • 파일.CPP.H 간의 .RC종속성을 관리하면 Visual C++에서 리소스 기호 파일에 종속된 파일을 불필요하게 다시 컴파일하지 .CPP 않도록 방지하는 방법을 설명합니다.

  • Visual C++에서 Set Includes 정보를 관리하는 방법은 Visual C++가 파일에 포함된 .RC 여러(중첩된) .RC 파일 및 여러 헤더 파일을 추적하는 방법에 대한 기술 세부 정보를 제공합니다.

Visual C++가 리소스 파일 및 헤더 파일을 관리하는 방법 개요

Visual C++는 단일 .RC 리소스 파일과 해당 .H 헤더 파일을 긴밀하게 결합된 파일 쌍으로 관리합니다. 파일에 리소스를 .RC 편집하고 저장할 때 해당 .H 파일에 기호를 간접적으로 편집하고 저장합니다. Visual C++의 MDI 사용자 인터페이스를 사용하여 한 번에 여러 .RC 파일을 열고 편집할 수 있지만 지정된 .RC 파일에 대해 정확히 하나의 해당 헤더 파일을 간접적으로 편집합니다.

리소스 뷰의 리소스 포함 대화 상자

리소스 포함액세스하려면 리소스 보기를다음 파일을 마우스 오른쪽 단추로 클릭하고 리소스 포함.RC 선택합니다.

기호 헤더 파일

기본적으로 Visual C++는 리소스 파일 RESOURCE.H의 이름(예 MYAPP.RC: )에 관계없이 항상 해당 헤더 파일의 이름을 지정합니다. 기호 헤더 파일: Visual C++의 리소스 포함 대화 상자에서 이 헤더 파일의 이름을 변경할 수 있습니다. 섹션의 편집 상자에 새 파일 이름을 입력합니다.

참고 항목

파일과 .RC 동일한 디렉터리에 없는 리소스 파일은 제대로 읽으려면 이스케이프-'\'가 있는 상대 경로 앞에 와야 합니다.

읽기 전용 기호 지시문

Visual C++는 지정된 .RC 파일에 대해 하나의 헤더 파일만 편집하지만 Visual C++는 추가 읽기 전용 헤더 파일에 정의된 기호에 대한 참조를 지원합니다. 읽기 전용 기호 지시문: 리소스 포함 대화 상자의 섹션에서 읽기 전용 기호 지시문으로 추가 읽기 전용 헤더 파일 수를 지정할 수 있습니다. "읽기 전용" 제한은 파일에 새 리소스 .RC 를 추가할 때 읽기 전용 헤더 파일에 정의된 기호를 사용할 수 있음을 의미합니다. 그러나 리소스를 삭제하는 경우에도 읽기 전용 헤더 파일에 정의된 기호가 다시 기본. 읽기 전용 기호에 할당된 숫자 값은 변경할 수 없습니다.

컴파일 타임 지시문

Visual C++는 또한 지시문을 사용하여 #include.RC 파일이 다른 파일에 포함된 리소스 파일의 중첩을 지원합니다. Visual C++를 사용하여 지정된 .RC 파일을 편집할 때 포함된 파일의 리소스는 표시되지 않습니다. 그러나 파일을 컴파일 .RC 하면 포함된 파일도 컴파일됩니다. 컴파일 시간 지시문: 리소스 포함 대화 상자의 섹션을 사용하면 Compile-Time 지시문으로 포함할 파일 수를 .RC 지정할 수 있습니다.

Compile-Time 지시문으로 지정되지 않은 다른 .RC 파일이 포함된 파일을 Visual C++.RC로 읽는 경우 어떻게 되는지 확인합니다. 이 상황은 이전에 텍스트 편집기를 사용하여 수동으로 기본 파일을 Visual C++.RC로 가져올 때 발생할 수 있습니다. Visual C++는 포함된 파일을 읽을 때 포함된 .RC 리소스를 부모 .RC 파일에 병합합니다. 부모 .RC 파일을 #include 저장하면 사실상 문이 포함된 리소스로 바뀝니다. 이 병합을 수행하지 않으려면 Visual C++로 읽기 전에 부모 파일에서 문을 제거 #include 한 다음 Visual C++를 사용하여 Compile-Time 지시문과 동일한 #include 문을 다시 추가해야 합니다..RC

Visual C++는 위의 세 가지 종류의 Set Includes 정보(기호 헤더 파일, 읽기 전용 기호 지시문 및 Compile-Time 지시문)를 지시문 및 리소스에 #includeTEXTINCLUDE 파일에 저장 .RC 합니다. 일반적으로 처리할 필요가 없는 구현 세부 정보인 리소스는 TEXTINCLUDE Visual C++가 집합을 관리하는 방법에 대해 설명합니다.

AppWizard에서 만든 .RC 파일 및 .H 파일 분석

애플리케이션 마법사가 만든 애플리케이션 코드를 살펴보면 Visual C++에서 여러 리소스 파일 및 헤더 파일이 어떻게 관리되는지 파악할 수 있습니다. 아래에서 검토한 코드 발췌문은 기본 옵션을 사용하여 AppWizard에서 생성한 애플리케이션에서 MYAPP 발췌한 것입니다.

애플리케이션 마법사가 만든 애플리케이션에는 아래 다이어그램에 요약된 것처럼 여러 리소스 파일과 여러 헤더 파일이 사용됩니다.

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        AFXRES.RC
        AFXPRINT.RC

Visual C++ 파일/Set Includes 명령을 사용하여 이러한 여러 파일의 관계를 볼 수 있습니다.

MYAPP.RC
Visual C++를 사용하여 편집하는 애플리케이션 리소스 파일입니다.

RESOURCE.H 는 애플리케이션별 헤더 파일입니다. 항상 AppWizard에 의해 이름이 지정 RESOURCE.H 되며, Visual C++의 헤더 파일 기본 이름 지정과 일치합니다. 이 헤더 파일의 #include 경우 리소스 파일(MYAPP.RC)의 첫 번째 문입니다.

//Microsoft Visual C++ generated resource script
//
#include "resource.h"

RES\MYAPP.RC2
Visual C++에서 편집하지 않지만 최종 컴파일된 .EXE 파일에 포함되는 리소스를 포함합니다. Visual C++에서 버전 리소스(이 릴리스의 새로운 기능)를 비롯하여 모든 표준 리소스를 편집할 수 있으므로 응용 프로그램 마법사에서는 기본적으로 이러한 리소스를 만들지 않습니다. 고유의 사용자 지정 서식 리소스를 이 파일에 추가하려는 경우 응용 프로그램 마법사에 의해 빈 파일이 생성됩니다.

사용자 지정 서식이 지정된 리소스를 사용하는 경우 Visual C++ 텍스트 편집기를 사용하여 리소스를 RES\MYAPP.RC2 추가하고 편집할 수 있습니다.

AFXRES.RCAFXPRINT.RC 프레임워크의 특정 기능에 필요한 표준 리소스를 포함합니다. 마찬가지로 RES\MYAPP.RC2이러한 두 프레임워크 제공 리소스 파일은 끝에 MYAPP.RC포함되며 포함 집합 대화 상자의 컴파일 시간 지시문에 지정됩니다. 따라서 Visual C++에서 편집 MYAPP.RC 하는 동안 이러한 프레임워크 리소스를 직접 보거나 편집하지는 않지만 애플리케이션의 이진 .RES 파일 및 최종 .EXE 파일로 컴파일됩니다. 수정 절차를 포함하여 표준 프레임워크 리소스에 대한 자세한 내용은 Technical Note 23을 참조하세요.

AFXRES.H 는 프레임워크에서 사용하고 특히 사용되는 표준 기호(예: ID_FILE_NEW)를 정의합니다 AFXRES.RC. AFXRES.H또한 Visual C++ 생성 .RC 파일 및 AFXRES.RC필요한 하위 집합 WINDOWS.H 을 포함하는 포함WINRES.H을 사용합니다#include. 정의된 AFXRES.H 기호는 애플리케이션 리소스 파일(MYAPP.RC)을 편집할 때 사용할 수 있습니다. 예를 들어 ID_FILE_NEW 파일의 메뉴 리소스에 FileNew 있는 메뉴 항목에 MYAPP.RC 사용됩니다. 이러한 프레임워크 정의 기호는 변경하거나 삭제할 수 없습니다.

추가 헤더 파일 포함

AppWizard에서 만든 애플리케이션에는 두 개의 헤더 파일 RESOURCE.H 만 포함됩니다 AFXRES.H. 애플리케이션별로만 RESOURCE.H 적용됩니다. 다음의 경우에는 추가 읽기 전용 헤더 파일만 포함하면 됩니다.

헤더 파일은 외부 소스에 의해 제공되거나, 여러 프로젝트 또는 동일 프로젝트의 여러 부분 간에 헤더 파일을 공유할 수 있습니다.

헤더 파일에는 Visual C++가 파일을 저장할 때 변경하거나 필터링하지 않으려는 서식과 주석이 있습니다. 예를 들면 다음과 같은 기호화된 산술을 사용하는 #define을 유지해야 하는 경우가 있습니다.

#define RED 0
#define BLUE 1
#define GREEN 2
#define ID_COLOR_BUTTON 1001
#define ID_RED_BUTTON (ID_COLOR_BUTTON + RED)
#define ID_BLUE_BUTTON (ID_COLOR_BUTTON + BLUE)
#define ID_GREEN_BUTTON (ID_COLOR_BUTTON + GREEN)

Resource Includes 명령을 사용하여 문을 다음과 같이 두 번째 읽기 전용 기호 지시문으로 지정 #include 하여 추가 읽기 전용 헤더 파일을 포함할 수 있습니다.

#include "afxres.h"
#include "second.h"

이제 새 파일 관계 다이어그램은 다음과 같습니다.

                   AFXRES.H
    RESOURCE.H     SECOND.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2  
        AFXRES.RC
        AFXPRINT.RC

.RC 파일 간에 헤더 파일 공유

서로 다른 프로젝트 또는 동일한 프로젝트에 있는 두 .RC 파일 간에 헤더 파일을 공유할 수 있습니다. 이렇게 하려면 위에서 설명한 읽기 전용 지시문 기술을 두 파일에 모두 .RC 적용합니다. 두 .RC 파일이 서로 다른 애플리케이션(다른 프로젝트)에 대한 경우 결과는 다음 다이어그램에 나와 있습니다.

     RESOURCE.H   AFXRES.H   RESOURCE.H  
    (for MYAPP1)  SECOND.H   (for MYAPP2)
          \       /     \       /
           \     /       \     /
          MYAPP1.RC      MYAPP2.RC
           /    \        /     \
          /      \      /       \
RES\MYAPP1.RC2  AFXRES.RC     RES\MYAPP2.RC2
                AFXPRINT.RC

두 번째 헤더 파일이 동일한 애플리케이션(프로젝트)의 두 .RC 파일에서 공유되는 경우는 아래에 설명되어 있습니다.

동일한 프로젝트에서 여러 리소스 파일 사용

Visual C++ 및 리소스 컴파일러는 한 파일을 다른 파일에 포함하는 .RC 지시문을 통해 #include 동일한 프로젝트의 여러 .RC 파일을 지원합니다. 다수의 중첩이 허용됩니다. 프로젝트의 리소스를 여러 .RC 파일로 분할하는 데는 여러 가지 이유가 있습니다.

  • 리소스를 여러 .RC 파일로 분할하는 경우 여러 프로젝트 팀 구성원 간에 많은 수의 리소스를 관리하는 것이 더 쉽습니다. 소스 제어 관리 패키지를 사용하여 파일을 검사 변경 내용을 검사 경우 리소스를 여러 .RC 파일로 분할하면 리소스에 대한 변경 내용을 더 세부적으로 관리할 수 있습니다.

  • 리소스의 일부에 대해 전처리기 지시문(예: #ifdef, #endif#define)을 사용하려면 리소스 컴파일러에서 컴파일할 읽기 전용 리소스에서 격리해야 합니다.

  • 구성 요소 .RC 파일은 하나의 복합 .RC 파일보다 Visual C++에서 더 빠르게 로드되고 저장됩니다.

  • 사용자가 읽을 수 있는 형식의 텍스트 편집기를 사용하여 리소스를 기본 하려면 Visual C++ 편집과 별도로 파일에 보관 .RC 해야 합니다.

  • 사용자 정의 리소스를 다른 특수 데이터 편집기에서 해석할 수 있는 이진 또는 텍스트 형식으로 유지해야 하는 경우 Visual C++에서 형식을 16진수 데이터로 변경하지 않도록 별도의 .RC 파일에 보관해야 합니다. .WAV MFC 고급 개념 샘플 SPEAKN의 (소리) 파일 리소스가 좋은 예입니다.

[포함 집합] 대화 상자의 [컴파일 시간 지시문]에 포함 SECOND.RC 할 수 있습니다.

#include "res\myapp.rc2"  // non-Visual C++ edited resources
#include "second.rc"  // THE SECOND .RC FILE

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources

다음 다이어그램은 그 결과를 보여 줍니다.

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        SECOND.RC  
        AFXRES.RC
        AFXPRINT.RC

Compile-Time 지시문을 사용하여 Visual C++편집 가능 및 편집할 수 없는 리소스를 여러 .RC 파일로 구성할 수 있습니다. 여기서 기본 MYAPP.RC 다른 .RC 파일 외 #include 에는 아무 작업도 수행하지 않습니다. Visual Studio C++ 프로젝트 .MAK 파일을 사용하는 경우 포함된 모든 리소스가 애플리케이션으로 컴파일되도록 프로젝트에 기본 .RC 파일을 포함해야 합니다.

편집할 수 없는 Visual C++ 파일 적용

AppWizard에서 만든 RES\MYAPP.RC2 파일은 실수로 Visual C++로 읽지 않으려는 리소스가 포함된 파일의 예이며 서식 정보가 손실된 상태에서 다시 작성합니다. 이 문제를 방지하려면 파일의 시작 부분에 다음 줄을 배치합니다 RES\MYAPP.RC2 .

#ifdef APSTUDIO_INVOKED
    #error this file is not editable by Visual C++
#endif //APSTUDIO_INVOKED

Visual C++는 파일을 컴파일할 .RC 때 둘 다 APSTUDIO_INVOKED 정의합니다 RC_INVOKED. AppWizard에서 만든 파일 구조가 손상되고 Visual C++가 위의 #error 줄을 읽는 경우 심각한 오류를 보고하고 파일 읽기를 .RC 중단합니다.

여러 Visual C++편집 .RC 파일이 공유하는 기호 관리

Visual C++에서 별도로 편집하려는 여러 .RC 파일로 리소스를 분할할 때 두 가지 문제가 발생합니다.

  • 여러 .RC 파일에서 동일한 기호를 공유할 수 있습니다.

  • 개발자는 Visual C++에서 동일한 ID 숫자 값이 개별 리소스(기호)에 할당되지 않도록 해야 합니다.

다음 다이어그램에서는 첫 번째 문제를 다루는 파일 및 .RC.H 구성을 보여 줍니다.

              MYAPP.RC
             /         \
            /           \
MYSTRS.H   / MYSHARED.H  \  MYMENUS.H
     \    /    /      \   \    \
      \  /    /        \   \    \
      MYSTRS.RC         MYMENUS.RC

이 예제에서는 문자열 리소스가 한 리소스 파일에 보관되고 메뉴는 다른 MYMENUS.RC리소스 파일에 MYSTRS.RC유지됩니다. 명령과 같은 일부 기호는 두 파일 사이에 공유될 수도 있습니다. 예를 들어 도구 ID_TOOLS_SPELL 메뉴의 맞춤법 항목에 대한 메뉴 명령 ID일 수 있으며, 애플리케이션의 기본 창 상태 표시줄에서 프레임워크가 표시하는 명령 프롬프트의 문자열 ID일 수도 있습니다.

기호는 ID_TOOLS_SPELL 공유 헤더 파일에 유지됩니다 MYSHARED.H. 텍스트 편집기를 사용하여 이 공유 헤더 파일을 수동으로 기본; Visual C++는 직접 편집하지 않습니다. 두 리소스 파일 MYSTRS.RC 에서 MYMENUS.RC앞에서 설명한 대로 리소스 포함 명령을 사용하여 읽기 전용 지시문에서 지정 #include "MYSHARED.H" 합니다MYAPP.RC.

리소스를 식별하는 데 사용하기 전에 공유할 기호를 예상하는 것이 가장 편리합니다. 공유 헤더 파일에 기호를 추가하고 파일에 대한 .RC 읽기 전용 지시문에 공유 헤더 파일을 아직 포함하지 않은 경우 기호를 사용하기 전에 추가합니다. 이러한 방식으로 기호 공유를 예상하지 못한 경우 수동으로(텍스트 편집기 사용) 기호에 대한 #define 문을 다음에서 MYMENUS.H 사용하기 MYSTRS.RC전으로 이동해야 MYSHARED.H 합니다.

여러 .RC 파일에서 기호를 관리하는 경우 Visual C++가 고유 리소스(기호)에 동일한 ID 숫자 값을 할당하지 않도록 해야 합니다. 지정된 .RC 파일의 경우 Visual C++는 4개의 ID에서 ID를 증분 방식으로 할당합니다기본. 편집 세션 간에 Visual C++는 파일에 대한 기호 헤더 파일의 각 할 일기본 할당된 마지막 ID를 .RC 추적합니다. 빈(새) .RC 파일의 APS_NEXT 값은 다음과 같습니다.

#define _APS_NEXT_RESOURCE_VALUE  101
#define _APS_NEXT_COMMAND_VALUE   40001
#define _APS_NEXT_CONTROL_VALUE   1000
#define _APS_NEXT_SYMED_VALUE     101

_APS_NEXT_RESOURCE_VALUE 는 대화 상자 리소스, 메뉴 리소스 등에 사용할 다음 기호 값입니다. 리소스 기호 값의 유효 범위는 1 ~ 0x6FFF입니다.

_APS_NEXT_COMMAND_VALUE 는 명령 식별에 사용할 다음 기호 값입니다. 명령 기호 값의 유효 범위는 0x8000 ~ 0xDFFF입니다.

_APS_NEXT_CONTROL_VALUE 는 대화 상자 컨트롤에 사용할 다음 기호 값입니다. 대화 상자 컨트롤 기호 값의 유효 범위는 8 ~ 0xDFFF입니다.

_APS_NEXT_SYMED_VALUE 는 기호 브라우저에서 새 명령을 사용하여 기호 값을 수동으로 할당할 때 발급되는 다음 기호 값입니다.

Visual C++는 새 .RC 파일을 만들 때 가장 낮은 법적 값인 약간 더 높은 값으로 시작합니다. 또한 애플리케이션 마법사는 이러한 값을 MFC 애플리케이션에 보다 적합한 형태로 초기화합니다. ID 값 범위에 대한 자세한 내용은 Technical Note 20을 참조 하세요.

이제 동일한 프로젝트에서도 새 리소스 파일을 만들 때마다 Visual C++는 동일한 _APS_NEXT_ 값을 정의합니다. 즉, 서로 다른 .RC 두 파일에서 여러 대화 상자를 추가하면 동일한 #define 값이 서로 다른 대화 상자에 할당될 가능성이 높습니다. 예를 들어 IDD_MY_DLG1 첫 번째 .RC 파일에는 두 번째 .RC 파일과 동일한 번호인 101 IDD_MY_DLG2 이 할당될 수 있습니다.

이 문제를 방지하려면 각 .RC 파일에 있는 ID의 4개 do기본 각각에 대해 별도의 숫자 범위를 예약해야 합니다. 리소스 추가를 시작하기 전에 각 파일.RC 값을 수동으로 업데이트 _APS_NEXT 하여 범위를 설정합니다. 예를 들어 첫 번째 .RC 파일이 기본값 _APS_NEXT 을 사용하는 경우 두 번째 .RC 파일에 다음 _APS_NEXT 값을 할당할 수 있습니다.

#define _APS_NEXT_RESOURCE_VALUE  2000
#define _APS_NEXT_COMMAND_VALUE   42000
#define _APS_NEXT_CONTROL_VALUE   2000
#define _APS_NEXT_SYMED_VALUE     2000

물론 Visual C++는 첫 번째 .RC 파일에 너무 많은 ID를 할당하여 숫자 값이 두 번째 .RC 파일에 예약된 값과 겹치기 시작할 수 있습니다. 이 충돌이 발생하지 않도록 충분히 큰 범위를 예약해야 합니다.

.CPP.H 파일 간의 .RC종속성 관리

Visual C++에서 .RC 파일을 저장하면 해당 RESOURCE.H 파일에 대한 기호 변경 내용도 저장됩니다. 파일의 리소스 .RC 를 참조하는 파일은 .CPP 일반적으로 프로젝트의 기본 헤더 파일 내에서 파일을 포함하는 RESOURCE.H 데 사용해야 #include 합니다. 이러한 포함은 원본 파일에서 헤더 종속성을 검색하는 개발 환경의 내부 프로젝트 관리로 인해 바람직하지 않은 부작용으로 이어집니다. Visual C++에서 새 기호를 추가할 때마다 지시문이 있는 #include "RESOURCE.H" 모든 .CPP 파일을 다시 컴파일해야 합니다.

Visual C++는 다음 주석을 파일의 RESOURCE.H 첫 번째 줄로 포함하여 종속성을 RESOURCE.H 우회합니다.

//{{NO_DEPENDENCIES}}

개발 환경에서는 종속 .CPP 파일을 다시 컴파일할 필요가 없도록 RESOURCE.H 변경 내용을 무시하여 이 주석을 해석합니다.

Visual C++는 파일을 저장할 때 항상 주석 줄을 .RC 파일에 추가 //{{NO_DEPENDENCIES}} 합니다. 경우에 따라 빌드 종속성을 RESOURCE.H 우회하면 연결 시 런타임 오류가 검색되지 않을 수 있습니다. 예를 들어 기호 브라우저를 사용하여 리소스의 기호에 할당된 숫자 값을 변경하는 경우 리소스를 참조하는 파일이 다시 컴파일되지 않으면 애플리케이션 런타임 .CPP 에 리소스를 올바르게 찾아서 로드하지 않습니다. 이러한 경우 기호 변경 내용 RESOURCE.H 의 영향을 받는 모든 .CPP 파일을 명시적으로 다시 컴파일하거나 모두 다시 빌드를 선택해야 합니다. 특정 리소스 그룹에 대한 기호 값을 자주 변경해야 하는 경우 추가 헤더 파일을 포함하여 위의 섹션에 설명된 대로 이러한 기호를 별도의 읽기 전용 헤더 파일로 분리하는 것이 더 편리하고 안전할 수 있습니다.

Visual C++가 Set Includes 정보를 관리하는 방법

위의 설명한 바와 같이, 파일 메뉴의 Set Includes 명령을 통해 세 가지 유형의 정보를 지정할 수 있습니다.

  • 기호 헤더 파일

  • 읽기 전용 기호 지시문

  • 컴파일 타임 지시문

다음 표에서는 Visual C++가 파일에서 .RC 이 정보를 기본 방법을 설명합니다. Visual C++를 사용하려면 이 정보가 필요하지 않지만, 포함 집합 기능을 보다 자신 있게 사용할 수 있도록 이해를 향상시킬 수 있습니다.

위의 세 가지 유형의 Set Includes 정보는 각각 두 가지 형식으로 파일에 저장 .RC 됩니다. (1) 리소스 컴파일러에서 해석할 수 있는 다른 지시문과 #include (2) Visual C++에서만 해석할 수 있는 특수 TEXTINCLUDE 리소스입니다.

리소스의 TEXTINCLUDE 목적은 Visual C++ 의 [포함 집합] 대화 상자에서 쉽게 표시할 수 있는 양식에 포함 설정 정보를 안전하게 저장하는 것입니다. TEXTINCLUDEVisual C++에서 정의한 리소스 종류 입니다. Visual C++는 리소스 ID 번호가 1, 2 및 3인 세 가지 특정 TEXTINCLUDE 리소스를 인식합니다.

TEXTINCLUDE 리소스 ID Set Includes 정보 유형
1 기호 헤더 파일
2 읽기 전용 기호 지시문
3 컴파일 타임 지시문

Set Includes 정보의 세 가지 유형은 각각 아래 설명된 대로 AppWizard에서 만든 파일 및 RESOURCE.H 기본값 MYAPP.RC 으로 설명됩니다. 종료된 문자열 0개와 END"" 큰따옴표 문자를 각각 지정하려면 RC 구문에서 블록과 블록 간의 BEGIN 추가 \0 및 토큰이 필요합니다.

기호 헤더 파일

리소스 컴파일러에서 해석하는 기호 헤더 파일 정보의 형식은 단순히 문입니다.#include

#include "resource.h"

해당 리소스는 다음과 같습니다 TEXTINCLUDE .

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END

읽기 전용 기호 지시문

읽기 전용 기호 지시문은 리소스 컴파일러에서 해석할 수 있는 다음 형식의 MYAPP.RC 맨 위에 포함됩니다.

#include "afxres.h"

해당 리소스는 다음과 같습니다 TEXTINCLUDE .

2 TEXTINCLUDE DISCARDABLE
BEGIN
   "#include ""afxres.h""\r\n"
   "\0"
END

컴파일 타임 지시문

컴파일 시간 지시문은 리소스 컴파일러에서 해석할 수 있는 다음 형식의 MYAPP.RC 끝에 포함됩니다.

#ifndef APSTUDIO_INVOKED
///////////////////////
//
// From TEXTINCLUDE 3
//
#include "res\myapp.rc2"  // non-Visual C++ edited resources

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources
#endif  // not APSTUDIO_INVOKED

이 지시문은 #ifndef APSTUDIO_INVOKED Visual C++에 Compile-Time 지시문을 건너뛰도록 지시합니다.

해당 리소스는 다음과 같습니다 TEXTINCLUDE .

3 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""res\myapp.rc2""  // non-Visual C++ edited resources\r\n"
"\r\n"
"#include ""afxres.rc""  // Standard components\r\n"
"#include ""afxprint.rc""  // printing/print preview resources\r\n"
"\0"
END

참고 항목

번호별 기술 참고 사항
범주별 기술 참고 사항