Udostępnij za pośrednictwem


TN035: Używanie wielu plików zasobów i plików nagłówkowych z Visual C++

[!UWAGA]

Następujące Uwaga techniczna została zaktualizowana, ponieważ najpierw została uwzględniona w dokumentacji online.W rezultacie niektóre procedur i tematów może być nieaktualne lub nieprawidłowe.Najnowsze informacje zaleca się wyszukać temat zainteresowanie Indeks dokumentacji online.

Uwaga ta opisuje, jak edytor zasobu Visual C++ obsługuje wiele plików zasobów i plików nagłówkowych udostępnione w jednym projektu lub współużytkowane przez wiele projektów i w jaki sposób można korzystać z tego wsparcia.Uwaga Ta odpowiedzi na następujące pytania:

  • Kiedy może chcesz podzielić projekt na wiele plików zasobów i/lub pliki nagłówków i jak to zrobić?

  • Jak udostępnić wspólnego nagłówka.H plików między dwoma.Pliki RC?

  • Jak podzielić zasoby projektu do wielu.Pliki RC?

  • Jak można (i narzędzia) zarządzać kompilacji zależności między.RC.CPP i.H pliki?

Należy pamiętać, że po dodaniu pliku dodatkowych zasobów do projektu ClassWizard nie rozpoznaje zasobów w pliku dodanej.

Uwaga ta ma strukturę odpowiedzi na powyższe pytania w następujący sposób:

  • Overview of How Visual C++ Manages Resource Files and Header FilesOmówienie jak polecenie Ustaw zawiera zasób w programie Visual C++ umożliwia używanie wielu plików zasobów i pliki nagłówków w tym samym projekcie.

  • Analysis of AppWizard-created .RC and .H Fileswygląda na wiele plików zasobów i nagłówka, używane przez aplikację tworzony AppWizard.Pliki te służyć jako dobra modelu dodatkowe pliki zasobów i plików nagłówkowych, którą chcesz dodać do projektu.

  • Including Additional Header Filesw tym artykule opisano, gdzie dołączać wiele plików nagłówka, a szczegółowe informacje, jak to zrobić.

  • Sharing a Header File Between Two .RC FilesPokazuje, jak można udostępnić jeden plik nagłówka między wieloma.Pliki RC w różnych projektach lub w samym projekcie.

  • Using Multiple Resource Files in the Same Projectw tym artykule opisano, gdzie można podzielić projektu do wielu.RC pliki i szczegółowe informacje, jak to zrobić.

  • Enforcement of Non-Editable Visual C++ Filesw tym artykule opisano, jak można mieć pewność, Visual C++, nie Edytuj i przypadkowo ponownie sformatować niestandardowe zasobu.

  • Managing Symbols Shared by Multiple Visual C++-Edited .RC Filesw tym artykule opisano sposób udostępniania tych samych symboli na wielu.Pliki RC i jak należy unikać przypisywania zduplikowany identyfikator wartości liczbowe.

  • Managing Dependencies Between .RC, .CPP, and .H Filesw tym artykule opisano, jak Visual C++ pozwala uniknąć niepotrzebnych ponownej kompilacji.CPP pliki, które są zależne od zasobu pliki symboli.

  • How Visual C++ Manages Set Includes Informationszczegółowe informacje techniczne dotyczące sposobu Visual C++ przechowuje informacje o wielu (zagnieżdżone).Pliki RC i wiele plików nagłówka, które są include'd przez #.Plik RC.

Omówienie sposobu Visual C++ zarządza pliki zasobów i nagłówka

Visual C++ zarządza pojedynczego.Plik zasobów RC i odpowiadającego.Plik nagłówka h jako ściśle powiązaną parę plików.Kiedy edytować i zapisywać zasobów.Plik RC można pośrednio, zapisywać symbole w odpowiednich.H pliku.Chociaż można otwierać i edytować wiele.RC pliki w czasie (przy użyciu interfejsu użytkownika programu Visual C++ MDI) na danym.Plik RC pośrednio edytować dokładnie jeden odpowiedniego pliku nagłówka.

Symbol nagłówka pliku

Domyślnie Visual C++ zawsze nazwy odpowiedniego pliku nagłówka zasobów.H, niezależnie od nazwy pliku zasobu (np. MOJAAPL.RC).Za pomocą Zasobów zawiera polecenia z widoku menu w programie Visual C++ można zmienić nazwę tego pliku nagłówka, aktualizując symbolu nagłówka pliku w Ustawić obejmuje okno dialogowe.

Dyrektyw Symbol tylko do odczytu

Chociaż Visual C++ edytuje tylko jeden plik nagłówka na danym.Plik RC, Visual C++ obsługuje odwołania do symboli zdefiniowanych w dodatkowym nagłówkiem tylko do odczytu plików.Za pomocą Zasobów zawiera polecenia z widoku menu w programie Visual C++ można określić dowolną liczbę dodatkowych nagłówka tylko do odczytu plików jako tylko do odczytu Symbol dyrektyw.Ograniczenia "tylko do odczytu" oznacza, że podczas dodawania nowego zasobu w.RC pliku, można użyć symbolu, zdefiniowanych w pliku nagłówkowym tylko do odczytu; Jednak po usunięciu zasobu symbol nadal pozostaje zdefiniowane w pliku nagłówkowym tylko do odczytu.Nie można zmienić wartość liczbowa, przypisany do symbolu tylko do odczytu.

Dyrektyw w czasie kompilacji

Visual C++ obsługuje również zagnieżdżanie plików zasobów, gdy jedna.Plik RC jest # include'd w innym.Podczas edycji danego.RC pliku przy użyciu języka Visual C++, wszystkie zasoby w plikach # include'd nie są widoczne.Jednak podczas kompilacji.Plik RC pliki # include'd również są kompilowane.Za pomocą Zasobów zawiera polecenia z widoku menu w programie Visual C++ można określić dowolną liczbę # include'd.RC plików jako dyrektyw w czasie kompilacji.

Należy zauważyć, co się stanie, jeśli przeczytać w Visual C++.Plik RC # include jest inny.RC pliku, który jest nie określonych w dyrektywie kompilacji.Sytuacja ta może być powstają, gdy doprowadzić do Visual C++.Plik RC użytkownik miał zostały uprzednio utrzymania ręcznie w edytorze tekstu.Kiedy Visual C++ odczytuje # include'd.Plik RC go scala zasobów # include'd obiektu nadrzędnego.Plik RC.Podczas zapisywania obiektu nadrzędnego.Plik RC # include oświadczenie, w efekcie zostanie zastąpione przez zasoby # include'd.Jeśli nie chcesz tego scalenia niepożądane, należy usunąć # zawierać oświadczenie z obiektu nadrzędnego.Plik RC uprzedniego do czytania go do programu Visual C++; następnie za pomocą Visual C++, ponownie dodać taki sam instrukcja dyrektywie kompilacji # include.

Zapisywane są w Visual C++.RC pliku trzy rodzaje powyżej ustawić zawiera informacje (Symbol pliku nagłówka, dyrektyw Symbol tylko do odczytu i dyrektyw w czasie kompilacji) w # obejmować dyrektyw i w TEXTINCLUDE zasobów.TEXTINCLUDE zasobów, szczegółowa implementacja, który zwykle trzeba zajmować, są wyjaśnione w Jak Visual C++ zarządza ustawić zawiera informacje.

Analiza utworzony przez AppWizard.RC i.H plików

Badanie kodu aplikacji, wyprodukowanych przez AppWizard zapewnia wgląd w jak Visual C++ zarządza wielu plików zasobów i plików nagłówkowych.Fragmenty kodu zbadane poniżej są z aplikacji MYAPP, wyprodukowanych przez AppWizard przy użyciu opcji domyślnych.

Aplikacja utworzona AppWizard używa wielu plików zasobów i wiele plików nagłówka, jak opisano w poniższym diagramie:

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

Można przeglądać te relacje wielu plików za pomocą polecenia pliku Visual C++/zestaw zawiera.

  • MYAPP.RC
    Plik zasobów aplikacji można edytować przy użyciu języka Visual C++.

ZASÓB.H jest plik nagłówkowy specyficzne dla aplikacji.Jest zawsze o nazwie ZASOBU.H przez AppWizard, zgodne z domyślnego języka Visual C++ Nazywanie pliku nagłówka.# Include dla tego pliku nagłówka jest pierwsza instrukcja w pliku zasobów (MOJAAPL.RC):

//Microsoft Visual C++ generated resource script
//
#include "resource.h"
  • RES\MYAPP.RC2
    Zawiera zasoby, które nie będą edytowane przez Visual C++, ale zostanie uwzględniona w ostatecznym skompilowany.Plik EXE.AppWizard tworzy domyślnie brak takich zasobów, ponieważ Visual C++ można edytować wszystkie standardowe zasoby, łącznie z zasobu wersji (Nowa funkcja w tej wersji).Pusty plik jest generowana przez AppWizard, w przypadku, gdy chcesz dodać własne niestandardowe zasobów sformatowany do tego pliku.

Użycie zasobów niestandardowych sformatowany, można dodać je do RES\MYAPP.RC2 i edytować za pomocą edytora tekstu języka Visual C++.

AFXRES.RC i AFXPRINT.RC zawiera standardowe zasoby wymagane przez niektóre funkcje w ramach.Podobnie jak RES\MYAPP.RC2, te dwa pliki zasobów dostarczonych do RAM są # include'd na końcu MOJAAPL.RC i one są określone w dyrektywach kompilacji, w oknie dialogowym Ustaw obejmuje.W ten sposób nie bezpośrednio wyświetlania lub edytowania tych zasobów w ramach podczas edycji MOJAAPL.RC w Visual C++, ale są one skompilowany do pliku binarnego aplikacji.Plik RES i final.Plik EXE.Więcej informacji na temat zasobów standardowych ramach, włącznie z procedur modyfikowania ich, zobacz technicznej przypis 23.

AFXRES.H definiuje standardowy symbole, takie jak ID_FILE_NEW, używany przez narzędzia AIF i używane wyłącznie w AFXRES.RC.AFXRES.H również # include w WINRES.H, który zawiera podzbiór systemu WINDOWS.H, które są potrzebne Visual C++ generowane.Pliki RC jak również AFXRES.RC.Symbole zdefiniowane w AFXRES.H są dostępne podczas edycji pliku zasobu aplikacji (MOJAAPL.RC).Na przykład ID_FILE_NEW jest używany nowy plik elementu menu w katalogu MYAPP.Zasób menu RC's.Nie można zmienić ani usunąć te symbole zdefiniowane w ramach.

Dołączanie plików dodatkowych nagłówka

Aplikacja utworzona AppWizard zawiera tylko dwa pliki nagłówków: zasobów.H i AFXRES.H.Tylko zasób.H jest specyficzny dla aplikacji.Należy dołączyć dodatkowy nagłówek tylko do odczytu plików w następujących przypadkach:

Plik nagłówka jest dostarczana przez zewnętrznego źródła, lub chcesz udostępnić plik nagłówkowy wśród wielu projektów lub wielu części tego samego projektu.

Plik nagłówka ma formatowania oraz komentarze, że nie ma Visual C++, zmienić lub odfiltrować podczas zapisywania pliku.Na przykład, być może chcesz zachować # zdefiniować 's symboliczne arytmetyczne, używać takiej jak:

#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)

Można dołączyć dodatkowy nagłówek tylko do odczytu plików za pomocą Zasobów zawiera polecenie, aby określić # include instrukcja jako druga dyrektywa Symbol tylko do odczytu, jak w:

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

Nowy diagram relacji plik teraz wygląda następująco:

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

Udostępnianie pliku nagłówka między dwoma.Pliki RC

Można udostępnić plik nagłówkowy między dwoma.RC pliki, które znajdują się w różnych projektach, lub ewentualnie tego samego projektu.Aby to zrobić, po prostu stosować techniki dyrektyw tylko do odczytu, opisane powyżej, zarówno.Pliki RC.W przypadku gdy dwa.Dla różnych aplikacji są pliki RC (różnych projektów), wynik jest zilustrowane na poniższym rysunku:

     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                 

Przypadek, gdy drugi plik nagłówka jest udostępniony przez dwa.Poniżej omówiono RC pliki w tej samej aplikacji (projekt).

Korzystanie z wielu plików zasobów w tym samym projekcie

Visual C++ i kompilatora zasób obsługi wielu.RC pliki w tym samym projekcie poprzez # obejmują 's jednego.RC plik w innym.Wiele zagnieżdżanie jest dozwolone.Istnieją różne przyczyny, aby podzielić zasoby projektu na wiele.RC plików:

  • Łatwiej zarządzać dużej liczby zasobów między wieloma członkami zespołu projektu podział zasobów w wielu.Pliki RC.Jeśli używasz pakietu zarządzania kontroli źródła wyewidencjonowywania plików i sprawdzania zmian, rozdzielania zasobów do wielu.Pliki RC da ściślejsza kontrola nad Zarządzanie zmianami do zasobów.

  • Jeśli chcesz użyć dyrektywy preprocesora, takie jak # ifdef, # ENDIF i # zdefiniować dla części zasobów, odizolowania ich w zasobach tylko do odczytu, które będą zbierane przez kompilator zasobów.

  • Składnik.Pliki RC będzie załadować i zapisać szybciej w programie Visual C++, niż jeden projekt wstępny.Plik RC.

  • Jeśli chcesz zachować zasobu za pomocą edytora tekstów w formie czytelnej, należy go przechowywać w.Edytuje plik RC oddzielnie od jednego języka Visual C++.

  • Jeśli trzeba zachować zasobów zdefiniowana przez użytkownika w postaci binarnych lub tekst jest interpretable przez inny edytor specjalistyczne danych, następnie należy go przechowywać oddzielnie.Plik RC tak Visual C++ nie zmienia format danych szesnastkowych..Zasoby plików WAV (dźwięk) w próbce MFC zaawansowane pojęcia SPEAKN są dobrym przykładem.

Można # zawierać sekundy.RC w dyrektywach kompilacji, w oknie dialogowym Ustaw obejmuje:

#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

Poniższy diagram przedstawia wynik:

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

Za pomocą dyrektyw w czasie kompilacji, możesz organizować zasoby Visual C++ edytowalne i nieedytowalne w wielu.Pliki RC, gdzie MYAPP "kapitan".Nic nie robi RC, ale # include w drugiej.Pliki RC.Jeśli używasz projektu Visual C++.Plik MAK, następnie powinny obejmować "wzorzec".RC plików w projekcie, tak aby wszystkie zasoby # include'd są opracowywane z aplikacji.

Wymuszanie nieedytowalnym Visual C++, pliki

Utworzony przez AppWizard RES\MYAPP.RC2 pliku jest przykładem pliku zawierającego zasoby, które można wykonać nie chcesz przypadkowo odczytu w Visual C++ i zapisać go wycofać utraty informacji o formatowaniu.Do ochrony przed tym, należy umieścić następujące wiersze na początku RES\MYAPP.Plik RC2:

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

Gdy kompiluje Visual C++.RC plik definiuje APSTUDIO_INVOKED oraz RC_INVOKED.Jeśli struktura pliku utworzony przez AppWizard jest uszkodzony i Visual C++ odczytuje powyżej wiersza "# błąd", zgłasza błąd krytyczny i przerwać Odczyt.Plik RC.

Zarządzanie symbole współużytkowanych przez wielu Visual C++-edytowane.Pliki RC

Dwie kwestie powstają, gdy podzielone do wielu zasobów.RC pliki, które chcesz edytować oddzielnie w programie Visual C++:

  • Można współużytkować ten sam symbole na wielu.Pliki RC.

  • Potrzeba pomocy Visual C++, należy unikać przypisywania tej samej wartości liczbowe identyfikator do zasobów (symbole).

Poniższy diagram ilustruje organizacji.RC i.H pliki, które zajmuje się pierwszego wydania:

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

W tym przykładzie ciąg zasobów są przechowywane w pliku jeden zasób, MYSTRS.RC i menu są przechowywane w innym MYMENUS.RC.Niektóre symbole, takie jak polecenia, trzeba być współużytkowane między dwoma plikami.Na przykład ID_TOOLS_SPELL może być identyfikator polecenia menu dla elementu pisowni, w menu Narzędzia; a może być również identyfikator ciągu wiersza polecenia wyświetlane w ramach na pasku stanu w głównym oknie aplikacji.

ID_TOOLS_SPELL symbol jest przechowywana w pliku nagłówkowym udostępnionego, MYSHARED.H.Zachować ten plik nagłówkowy udostępnionego ręcznie za pomocą edytora tekstu; Visual C++ nie bezpośrednio edytować.W dwóch zasobów plików MYSTRS.RC i MYMENUS.RC, możesz określić # obejmują MYSHARED.H w dyrektywach tylko do odczytu dla MOJAAPL.RC, za pomocą Zasobów zawiera polecenia, w sposób opisany wcześniej.

Jest najbardziej wygodne do przewidzenia symbol będzie udostępniać przed próbą użycia go do identyfikacji każdego zasobu.Dodać symbol do pliku udostępnionego nagłówka i, jeśli jeszcze nie # include'd pliku udostępnionego nagłówka w dyrektywach tylko do odczytu dla.RC pliku, w tym celu przed użyciem symbolu.Jeśli nie jest przewidywane symbol w ten sposób udostępniania, a następnie trzeba będzie ręcznie (przy użyciu edytora tekstu) # define instrukcji dla symbolu, powiedz, Przenieś MYMENUS.H do MYSHARED.H przed użyciem go w MYSTRS.RC.

Podczas zarządzania symbolami w wielu.Pliki RC musi pomaga również Visual C++, należy unikać przypisywania tej samej wartości liczbowe identyfikator do zasobów (symbole).Dla dowolnego, biorąc pod uwagę.Plik RC, Visual C++ przyrostowo przypisuje identyfikatory w każdej z czterech identyfikator domeny.Sesjach edycji Visual C++ przechowuje informacje o ostatniej identyfikator przypisany go w każdej domenie w pliku nagłówka symbol.Plik RC.Oto wartości APS_NEXT są puste (nowe).RC pliku:

#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 wartość następnego symbolu używanego do okna dialogowego zasobu, zasób menu i tak dalej.Prawidłowy zakres dla zasobu symbol wartości to 1 do 0x6FFF.

_APS_NEXT_COMMAND_VALUE jest wartością symbol dalej będzie używany do identyfikacji polecenia.Prawidłowy zakres dla polecenia symbol wartości jest 0x8000 do 0xDFFF.

_APS_NEXT_CONTROL_VALUE jest wartością symbol dalej będzie używany do sterowania okno dialogowe.Prawidłowy zakres dla wartości symboli formantu okna dialogowego jest 8 do 0xDFFF.

_APS_NEXT_SYMED_VALUE jest wartością symbol dalej będzie wydawane, gdy ręcznie przypisać wartość symbolu za pomocą polecenia Nowy w przeglądarce Symbol.

Visual C++ zaczyna się nieco wyższe wartości prawnej najniższej wartości, podczas tworzenia nowego.Plik RC.AppWizard również zostanie zainicjowany te wartości na coś bardziej odpowiednie dla aplikacji MFC.Aby uzyskać więcej informacji na temat zakresów wartości Identyfikatora, zobacz technicznej 20 Uwaga.

Po każdym utworzeniu nowego pliku zasobów, nawet w tym samym projekcie Visual C++ definiuje to samo _APS_NEXT_ wartości.Oznacza to, że jeśli dodasz, powiedzmy wielu okna w dwóch różnych.Pliki RC jest wysoce prawdopodobne, że ten sam # define wartości zostaną przypisane do różnych okien dialogowych.Na przykład, IDD_MY_DLG1 w pierwszym.RC pliku może być przypisany taki sam numer, 101, jako IDD_MY_DLG2 w drugiej.Plik RC.

Aby tego uniknąć, należy zarezerwować oddzielny zakres liczbowe dla każdego z czterech domenach identyfikatorów w odpowiedniej.Pliki RC.W tym celu należy ręcznie zaktualizować _APS_NEXT wartości w każdym.Pliki RC before możesz rozpocząć dodawanie zasobów.Na przykład jeśli pierwszym.Plik RC używa domyślnie _APS_NEXT wartości, a następnie chcesz przypisać następujące _APS_NEXT wartości do drugiego.RC pliku:

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

Oczywiście jest nadal możliwe, że Visual C++ przypisze tak wiele identyfikatorów w pierwszym.Plik RC wartości liczbowe zacząć zachodzą na siebie te zastrzeżone dla drugiego.Plik RC.Wystarczająco duże zakresy należy zarezerwować tak, że tak nie jest.

Zarządzanie zależności między.RC.CPP i.H plików

Gdy zapisuje Visual C++.RC pliku również zapisuje zmiany symbol odpowiedniego ZASOBU.H pliku.Dowolną z sieci.Pliki CPP, które odwołują się do zasobów.Plik RC musi # obejmują ZASOBU.Plik H, zazwyczaj z projektu głównego nagłówka pliku.Prowadzi to do niepożądanych efekt uboczny z powodu zarządzania projekt wewnętrzny środowiska programowania, które skanuje pliki źródłowe dla nagłówka zależności.Każdorazowo, aby dodać nowy symbol w Visual C++, wszystkie.Plik CPP że # include zasobów.H musi być skompilowana.

Visual C++ obejścia zależności ZASOBU.H przez dołączenie następujących komentarz jako pierwszy wiersz ZASOBU.H plik:

//{{NO_DEPENDENCIES}}

Środowisko programowania interpretuje ten komentarz, ignorując zmiany do ZASOBU.H, tak że zależnych.Pliki CPP nie trzeba ponownie skompilowana.

Visual C++ zawsze dodaje //{{NO_DEPENDENCIES}} komentarz wiersza.RC pliku podczas zapisywania pliku.W niektórych przypadkach obejścia kompilacji zależności ZASOBU.H może prowadzić do błędów czasu wykonywania pozostał niezauważony w czasie łącze.Na przykład, jeśli używana przeglądarka Symbol na zmianę wartości liczbowe przypisany do symbolu dla zasobu, zasób będzie nie poprawnie znaleźć i załadowany w aplikacji, jeśli run-time.Plik CPP odnoszące się do zasobu nie jest ponownie kompilowana.W takich przypadkach należy jawnie skompilowana dowolne.Symbol zmiany zasobów dotyczy plików CPP, które znasz.H lub zaznacz Odbudować wszystkie.Jeśli potrzeba często zmieniać wartości symboli dla grupy zasobów, prawdopodobnie znajdziesz go bardziej wygodnym i bezpieczniejsze z tych symboli w pliku oddzielnym nagłówka tylko do odczytu, jak opisano w powyższej sekcji Włączając dodatkowe pliki nagłówków.

Jak Visual C++ zarządza zestaw zawiera informacje

Jak już wspomniano powyżej, menu Plik polecenie Ustaw obejmuje pozwala określić trzy typy informacji:

  • Symbol nagłówka pliku

  • Dyrektyw Symbol tylko do odczytu

  • Dyrektyw w czasie kompilacji

Niżej przedstawiono, jak Visual C++ przechowuje te informacje w.Plik RC.Nie trzeba te informacje, aby użyć języka Visual C++, ale może pomóc lepiej zrozumieć, tak aby więcej zwracali można użyć funkcji Ustaw obejmuje.

Każdy powyższe trzy typy ustawić zawiera informacje są przechowywane w.Plik RC w dwóch formach: (1) jak # obejmują lub interpretable innych dyrektyw przez kompilator zasobów i (2) jako interpretable specjalne zasoby TEXTINCLUDE tylko przez Visual C++.

Celem zasobu TEXTINCLUDE jest bezpiecznie przechowywać ustawić zawierają informacje w formie, która jest łatwo presentable w programie Visual C++ Ustawić obejmuje okno dialogowe.TEXTINCLUDE jest typu zasobu określonych przez Visual C++.Visual C++ rozpoznaje trzech określonych zasobów TEXTINCLUDE, które mają zasobu numery identyfikacyjne, 1, 2 i 3:

Identyfikator zasobów TEXTINCLUDE

Typ informacji, ustaw obejmuje

1

Symbol nagłówka pliku

2

Dyrektyw Symbol tylko do odczytu

3

Dyrektyw w czasie kompilacji

Domyślnie MOJAAPL ilustruje każdego z trzech typów ustawić zawiera informacje.RC i zasobów.H pliki utworzone przez AppWizard, jak opisano poniżej.Dodatkowe \0 i "" tokeny między BEGIN i END bloki są wymagane przez RC składni odpowiednio określić zero zakończonych ciągi i znaku podwójnego cudzysłowu.

Symbol nagłówka pliku

Formularz informacji symbolu nagłówka pliku interpretowane przez kompilator zasobu jest po prostu # include instrukcji:

#include "resource.h"

Odpowiedni zasób TEXTINCLUDE jest:

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

Dyrektyw Symbol tylko do odczytu

Tylko do odczytu dyrektyw symbolu są uwzględniane w górnej części MOJAAPL.RC w formularzu interpretable przez kompilator zasobu:

#include "afxres.h"

Odpowiedni zasób TEXTINCLUDE jest:

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

Dyrektyw w czasie kompilacji

Dyrektyw w czasie kompilacji są uwzględniane na końcu MOJAAPL.RC w formularzu interpretable przez kompilator zasobu:

#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

Dyrektywa APSTUDIO_INVOKED #ifndef nakazuje Visual C++, aby pominąć dyrektyw w czasie kompilacji.

Odpowiedni zasób TEXTINCLUDE jest:

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

Zobacz też

Inne zasoby

Uwagi techniczne przez liczbę

Uwagi techniczne według kategorii