Freigeben über


TN035: Verwenden von mehreren Ressourcendateien und der Headerdateien mit Visual C++

HinweisHinweis

Im Folgenden technischen Hinweis ist nicht aktualisiert wurde, seitdem er erstmals in der Onlinedokumentation enthalten waren.Folglich können mehrere Prozeduren und Themen veraltet oder falsch.Die aktuellsten Informationen wird empfohlen, zum Thema Onlinedokumentations im Index finden.

Dieser Hinweis wird beschrieben, wie der Visual C++-Ressourcen-Editor mehrere Headerdateien und Ressourcendateien unterstützt, die in einem einzelnen Projekt gemeinsam genutzt oder in mehreren Projekten gemeinsam genutzt werden und wie Sie diese Unterstützung genutzt werden können.Dieser Hinweis diese Fragen beantwortet werden:

  • Als sollten Sie ein Projekt in mehrere Ressourcendateien und/oder in Headerdateien teilen, und führen Sie es wie?

  • So erstellen Sie einen allgemeinen Header aufweisen. .h-Datei zwischen zwei .RC-Dateien?

  • Wie gehen Sie Verteilung Projektressourcen in mehrere .RC-Dateien?

  • Wie gehen Sie, Verwalten und Tools (Buildabhängigkeiten) zwischen .RC, und .CPP. H-Dateien?

Beachten Sie, dass, wenn Sie eine Datei der zusätzlichen Ressourcen dem Projekt hinzugefügt haben, ClassWizard nicht die Ressourcen in der hinzugefügten Datei erkennt.

Dieser Hinweis wird so strukturiert, um die obigen Fragen zu beantworten:

  • Overview of How Visual C++ Manages Resource Files and Header Files bietet eine Übersicht darüber, wie der Ressourcen-Satz Befehl in Visual C++ können Sie mehrere Headerdateien und Ressourcendateien im gleichen Projekt enthält.

  • Analysis of AppWizard-created .RC and .H Files betrachtet die mehrere Ressourcen und Headerdateien, die von einer Anwendungs-Assistent-erstellte Anwendung verwendet werden.Diese Dateien dienen als gutes Modell für Dateien und Headerdateien der zusätzlichen Ressourcen, die Sie dem Projekt hinzufügen möchten.

  • Including Additional Header Files beschreibt, wo Sie mehrere Headerdateien enthalten sein sollen, und stellt Details, wie Sie so vorgehen müssen.

  • Sharing a Header File Between Two .RC Files zeigt, wie Sie eine Headerdatei zwischen mehreren .RC-Dateien in unterschiedlichen Projekten freigeben können, oder möglicherweise im gleichen Projekt.

  • Using Multiple Resource Files in the Same Project beschreibt, wo Sie das Projekt in mehrere .RC-Dateien unterbrechen soll oben und bietet Details, wie Sie so vorgehen müssen.

  • Enforcement of Non-Editable Visual C++ Files wird beschrieben, wie Sie sicherstellen können, dass Visual C++ nicht bearbeitet und versehentlich eine benutzerdefinierte Ressource umformatiert.

  • Managing Symbols Shared by Multiple Visual C++-Edited .RC Files wird beschrieben, wie die gleichen Symbole für mehrere .RC-Dateien freigibt und wie Sie doppelte, vermeidet ID numerische Werte zuzuweisen.

  • Managing Dependencies Between .RC, .CPP, and .H Files wird beschrieben, wie Visual C++ vermeidet unnötige die Neukompilierung .CPP-Dateien Symbol für Ressourcen, die von den Dateien abhängig sind.

  • How Visual C++ Manages Set Includes Information bietet technische Details dazu, wie Visual C++ mehrere (geschachtelte .RC-Dateien) und mehrere Headerdateien nachverfolgt werden, die #include'd von einer RC-Datei sind.

Übersicht über das Verwalten von Headerdateien und Ressourcendateien Visual C++

Visual C++ verwalteten eine einzelne .RC-Ressourcendatei und einen entsprechenden. verkoppeltes Paar von Dateien als H-Headerdatei fest.Wenn Sie Ressourcen in einer RC-Datei bearbeiten und speichern möchten, bearbeiten Sie indirekt im entsprechenden Symbole und speichern. .h-Datei.Obwohl Sie mehrere .RC-Dateien (mit Visual C++ MDI-Benutzeroberfläche) für jede angegebene RC-Datei gleichzeitig öffnen und bearbeiten können, bearbeiten Sie indirekt genau eine entsprechende Headerdatei.

Symbol-Headerdatei

Standardmäßig von Visual C++ Namen immer die entsprechende Headerdatei RESOURCE.H, unabhängig vom Namen der Ressourcendatei (z. B., MYAPP.RC).Verwenden des Ressourcenincludes Befehl aus dem Menü Ansicht in Visual C++ können Sie den Namen der Headerdatei ändern, indem Sie die Symbol-Headerdatei Datei im Dialogfeld Includes festlegen aktualisieren.

Schreibgeschützte Symbol-Direktive

Obwohl Visual C++ nur eine Headerdatei für jede angegebene RC-Datei bearbeitet, unterstützt Visual C++ Verweise auf Symbole, die in zusätzlichen schreibgeschützten Headerdateien definiert sind.Verwenden des Ressourcenincludes Befehl aus dem Menü Ansicht in Visual C++ können Sie beliebig viele zusätzliche schreibgeschützte Headerdateien als schreibgeschützte Symbol-Direktive angeben.Die "schreibgeschützte" - Einschränkung bedeutet, dass, wenn Sie eine neue Ressource in der RC-Datei hinzufügen, können Sie ein Symbol, das sich in der schreibgeschützten Headerdatei definiert wurde. Wenn Sie jedoch die Ressource löschen, bleibt das Symbol weiterhin in der schreibgeschützten Headerdatei definiert.Sie können den numerischen Wert nicht ändern, der einem schreibgeschützten Symbol zugewiesen wird.

Kompilierzeitdirektive

Visual C++ unterstützt auch Schachtelung von Ressourcendateien, in denen eine RC-Datei #include'd innerhalb einer anderen Zeichenfolge ist.Wenn Sie eine gegebene RC-Datei mit Visual C++ bearbeitet werden, sind keine Ressourcen in den #include'd Dateien nicht sichtbar.Wenn Sie jedoch die RC-Datei kompilieren, werden die Dateien #include'd ebenfalls kompiliert.Verwenden des Ressourcenincludes Befehl aus dem Menü Ansicht in Visual C++ können Sie eine beliebige Anzahl #include'd .RC Dateien als Kompilierzeitdirektive angeben.

Beachten Sie, was geschieht, wenn es in Visual C++ eine RC-Datei die andere RC-Datei der #includes lesen, die nicht als Kompilierzeitdirektive angegeben wird.Diese Situation entstände werden, wenn Sie mit Visual C++ eine RC-Datei, die Sie zuvor mit einem Texteditor manuell verwaltet.Wenn Visual C++ die #include'd RC-Datei liest, wird die #include'd Ressourcen in die Elemente RC-Datei zusammen.Wenn Sie die Elemente RC-Datei speichern, wird die aktive Anweisung #include von der #include'd Ressourcen ersetzt.Wenn Sie diese Zusammenführung nicht geschehen soll, sollten Sie die #include Anweisung aus der übergeordneten RC-Datei vor dem Lesevorgang sie in Visual C++ entfernen. anschließend mit Visual C++, fügen Sie die gleiche Anweisung wie #include Kompilierzeitdirektive hinzu.

Visual C++ enthält in einer RC-Datei, die die drei Arten von Informationen (Symbol-Headerdatei oben festgelegt, schreibgeschützte Symbol-Direktive und Kompilierzeitdirektive) und-Direktiven #include in TEXTINCLUDE-Betriebsmitteln enthält.Die TEXTINCLUDE-Betriebsmittel, ein Implementierungsdetail, das Sie müssen normalerweise nicht zu arbeiten, werden in Wie Visual C++ verwaltet, schließt Satz von Informationen erläutert.

Anwendungs-Assistent-Erstellten Analyse und .RC. H-Dateien

Die Untersuchung des Anwendungscodes, der vom Anwendungs-Assistenten erstellt wird, bietet Einblicke in bereit, wie Visual C++ mehrere Ressourcendateien und Headerdateien verwaltet.Die Code auszüge, die überprüft werden, sind von einer MYAPP-Anwendung, die vom Anwendungs-Assistenten erstellt wird, der die Standardoptionen verwendet.

Eine Anwendungs-Assistent-erstellte Anwendung werden mehrere Ressourcendateien sowie mehrere Headerdateien, wie im Diagramm unten zusammengefasst:

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

Sie können diese Beziehungen der mehrere Dateien mithilfe der Visual C++-Datei/des Satzes an ein Befehl.

  • MYAPP.RC
    Die Anwendungsressourcendatei, die Sie mit Visual C++ bearbeitet werden.

RESOURCE.H ist die anwendungsspezifische Headerdatei.Es wird immer RESOURCE.H vom Anwendungs-Assistenten benannt, der mit Visual C++ Standard Namen der Headerdatei konsistent ist.Das #include für diese Headerdatei ist die erste Anweisung in der Ressourcendatei (MYAPP.RC):

//Microsoft Visual C++ generated resource script
//
#include "resource.h"
  • RES \ MYAPP.RC2
    Enthält Ressourcen, die nicht von Visual C++ bearbeitet werden, jedoch wird in der letzten kompilierten EXE-Datei enthalten sind.Anwendungs-Assistent erstellt keine Ressourcen seit Visual C++ standardmäßig alle Ressourcen Standard verarbeiten kann, einschließlich der Versionsressource (eine neue Funktion in dieser Release ").Eine leere Datei wird vom Anwendungs-Assistenten generiert, wenn Sie eigene benutzerdefinierte formatierten Ressourcen dieser Datei hinzufügen möchten.

Wenn Sie benutzerdefinierte formatierte Ressourcen verwenden, können Sie diese RES \ MYAPP.RC2 hinzufügen und diese mithilfe von Visual C++-Text-Editors bearbeiten.

AFXRES.RC und AFXPRINT.RC enthalten die Ressourcen frei, die von bestimmten Features erforderlich sind.Wie RES \ MYAPP.RC2 diese Framework-stellten zwei Ressourcendateien sind #include'd am Ende der MYAPP.RC bereit, und sie werden in den Kompilierzeitdirektiven des Satzes ein Dialogfeld angegeben.So zeigen Sie nicht direkt an bzw. bearbeiten diese Framework Ressourcen frei, während Sie MYAPP.RC in Visual C++ bearbeitet werden, sie werden jedoch in die binäre das .RES-Datei der Anwendung und final exe-datei kompiliert.Weitere Informationen zu den standardmäßigen Framework Ressourcen einschließlich Verfahren zum Ändern der finden Sie unter Technischer Hinweis 23.

AFXRES.H definiert, wie Standardsymbole verwendet, ID_FILE_NEW vom Framework und AFXRES.RC ausdrücklich verwendet.AFXRES.H WINRES.H auch #includes DAS, die eine Teilmenge WINDOWS.H enthält, die von Visual C++ benötigt werden, sowie .RC-Dateien generierte AFXRES.RC.Die Symbole, die in AFXRES.H definiert werden, sind verfügbar, da Sie die Anwendungsressourcendatei () MYAPP.RC bearbeiten.Beispielsweise wird ID_FILE_NEW für das neue Menüelement in der Datei MYAPP.RC'S-Menüressource verwendet.Sie können diese vom Framework definiert keine Symbole ändern oder löschen.

Einschließen von Headerdateien zusätzliche

Die Anwendungs-Assistent-erstellte Anwendung verfügt nur über zwei Headerdateien: RESOURCE.H und AFXRES.H.Nur RESOURCE.H ist anwendungsspezifisch.Sie müssen möglicherweise zusätzliche schreibgeschützte von Headerdateien in den folgenden Fällen einschließen:

Die Headerdatei wurde von einer externen Quelle bereitgestellt werden, oder Sie möchten die Headerdatei mit mehreren Projekten oder mehreren Teilen des gleichen Projekts verwenden.

Die Headerdatei besitzt Formatierung und Kommentare, dass Sie Visual C++ nicht herausfiltern oder ändern möchten, wenn die Datei gespeichert wird.Möglicherweise möchten Sie z. B. der #defines beibehalten, die symbolische Arithmetik verwenden Sie z:

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

Sie können zusätzliche schreibgeschützte Headerdateien umfassen, indem Sie den Befehl verwenden, um die Ressourcenincludes #include Anweisung als zweiten schreibgeschützten Symbol-Direktive, wie in anzugeben:

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

Das Verhältnis-Diagramm der neuen Datei Jetzt sieht wie folgt aus:

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

Eine Headerdatei zwischen zwei .RC-Dateien aufheben

Sie sollten eine Headerdatei zwischen zwei .RC-Dateien, die in unterschiedlichen Projekten sind, oder möglicherweise demselben Projekt gemeinsam verwenden.Zu diesem Zweck wenden Sie einfach die schreibgeschützte - Direktive technik, die sowohl .RC-Dateien beschrieben wird.Wenn die beiden .RC-Dateien für verschiedene Anwendungen sind (verschiedene Projekte), wird das Ergebnis im folgenden Diagramm veranschaulicht:

     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                 

Der Fall, in dem die zweite Headerdatei durch zwei .RC-Dateien in derselben Anwendung (Project) gemeinsam genutzt wird unten erläutert wird.

Verwenden mehrerer Ressourcendateien im gleichen Projekt

Visual C++ und der Ressourcencompiler unterstützen mehrere .RC-Dateien im gleichen Projekt durch #includes aus einer RC-Datei in eine andere.Mehrere Schachtelung ist zulässig.Es gibt verschiedene Gründe, die Ressourcen des Projekts in mehrere .RC-Dateien zu aufteilen:

  • Es ist einfacher, viele Ressourcen von mehreren Projektteammitgliedern zu verwalten, wenn Sie mehrere Ressourcen in .RC-Dateien aufgeteilt.Wenn Sie ein Paket verwaltungs Quellcodeverwaltung auschecken und Dateien für das Einchecken von Änderungen, gibt das Teilen der Ressourcen in mehrere .RC-Dateien Sie genauere Kontrolle über das Verwalten von Änderungen an Ressourcen.

  • Wenn Sie die Präprozessordirektiven verwenden möchten, #ifdef #endif und #define, für Teile der Ressourcen, müssen Sie sie in schreibgeschützten Ressourcen zu suchen, die vom Ressourcencompiler kompiliert werden.

  • Laden und Speichern Teil-.RC-Dateien in Visual C++ schneller als eine Zusammensetzungs rc-datei.

  • Wenn Sie eine Ressource mit einem Texteditor in einer lesbaren Format beibehalten möchten, sollten Sie sie in einer RC-Datei getrennt von den Änderungen mit einem Visual C++ erhalten.

  • Wenn Sie eine benutzerdefinierte Ressource in eine Binärdatei halten müssen oder Textform, das durch einen anderen Editor die speziellen erklärbar ist, sollten Sie ihn in einer separaten RC-Datei enthalten. Daher ändert Visual C++ das Format nicht auf die hexadezimale Daten.Die (Sounden) Dateiressourcen .WAV in MFC wechselten Konzepte Beispiel SPEAKN ein gutes Beispiel sind.

Sie können #include, das ein SECOND.RC Kompilierzeitdirektiven in den im Dialogfeld Gruppe enthält:

#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

Das Ergebnis wird im folgenden Diagramm veranschaulicht:

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

Verwenden von Kompilierzeitdirektive können Sie das Visual C++-editable und nicht-bearbeitbare mehrere Ressourcen in .RC-Dateien organisieren, in denen der "Master" MYAPP.RC jedoch keine #include die anderen .RC-Dateien ausführt.Wenn Sie eine Datei des Visual C++-Projekts .MAK verwenden, sollten Sie die "Master" RC-Datei im Projekt einschließen, damit alle #include'd Ressourcen gemeinsam mit der Anwendung kompiliert werden.

Erzwingung von Noneditable-Visual C++-Dateien

Die Datei Anwendungs-Assistent-erstellte RES \ MYAPP.RC2 ist ein Beispiel für eine Datei, die Ressourcen enthält, die nicht in Visual C++ versehentlich lesen möchten, und dann zu schreibende mit Verlust von Formatierungsinformationen ausweichen.Um sich gegen dieses zu schützen, setzen Sie die folgenden Zeilen am Anfang der Datei RES \ MYAPP.RC2:

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

Wenn die RC-Datei Visual C++ kompiliert, definiert sie APSTUDIO_INVOKED sowie RC_INVOKED.Wenn die Anwendungs-Assistent-erstellte Dateistruktur beschädigt ist und Visual C++ die #error Zeile nach oben gelesen wird, wird sie erstellt ein schwer wiegender Fehler und Lesen der RC-Datei ab.

Die Symbole verwalten, die von mehreren Dateien C++-Edited Visuals .RC

Zwei Probleme entstehen, wenn Sie die Ressourcen in mehrere .RC-Dateien aufspalten, die Sie in Visual C++ einzeln bearbeiten möchten:

  • Sie sollten die gleichen Symbole für mehrere .RC-Dateien freigeben.

  • Visual C++ müssen Sie können die gleiche ID numerischen Werte für den verschiedenen Ressourcen (Symbolen) zuweisen zu vermeiden.

Das folgende Diagramm veranschaulicht eine Organisation von und .RC. Mit H-Dateien, das das erste Problem behandelt:

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

In diesem Beispiel werden Zeichenfolgenressourcen in einer Ressourcendatei, MYSTRS.RC betrachtet, und Menüs in einem anderen MYMENUS.RC ausgeführt werden.Einige Symbole, z. B. für Befehle, müssen zwischen den beiden Dateien freigegeben werden.Zum Beispiel kann ein ID_TOOLS_SPELL den Menübefehl ID für das Element im Menü Extras, Bann und es ist möglicherweise auch die Zeichenfolgen-ID der Eingabeaufforderung, die vom Framework in der Statusleiste Hauptfenster der Anwendung angezeigt wird.

Das ID_TOOLS_SPELL-Symbol wird in der freigegebenen Headerdatei gespeichert. MYSHARED.H.Sie behalten diese freigegebene Headerdatei mit einem Texteditor manuell verwaltet. Visual C++ nicht direkt verarbeitet sie.In den beiden Ressourcendateien MYSTRS.RC und geben Sie MYMENUS.RC #include MYSHARED.H in schreibgeschützten - Direktive für MYAPP.RC unter Verwendung des Ressourcenincludes Befehls an, wie oben beschrieben.

Dies ist besonders bequemsten, ein Symbol vorauszusehen, die Sie freigeben, bevor Sie versuchen, es verwendet jede Ressource zu identifizieren.Vor dem Verwenden des Symbols fügen Sie das Symbol von hinzu und Headerdatei (sofern dies nicht bereits #include'd die freigegebene Headerdatei in schreibgeschützten - Direktive für die RC-Datei haben, gehen Sie so.Wenn Sie das Symbol nicht auf diese Weise freigeben vorwegnahmen, vor der Verwendung in MYSTRS.RC müssen Sie manuell (mithilfe eines Text-Editors) die #define Anweisung für das Symbol aus MYMENUS.H verschieben wir z. B. auf MYSHARED.H.

Wenn Sie Symbole in mehrere .RC-Dateien verwalten, müssen Sie mit Visual C++ auch die gleichen ID numerischen Werte auf unterschiedlichen Ressourcen (Symbolen) zuweisen zu vermeiden.Für jede gegebene RC-Datei weist Visual C++ inkrementelle ID in jeder der vier ID domänen.Zwischen Aufbereitungen verfolgt Visual C++ die letzte ID, die sich in jeder der Domänen in der headerdatei Symbol für die RC-Datei zuwies.Hier sehen Sie, wie die APS_NEXT-Werte für eine neue leere () RC-Datei sind:

#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 ist der folgende Wert des Symbols für eine Dialogfeldressource, Menüressource usw. verwendet wird.Der gültige Bereich für Ressourcen zu 0x6FFF Symbol für Attributwerte ist 1.

_APS_NEXT_COMMAND_VALUE ist der folgende Wert des Symbols für eine Befehlserkennung verwendet wird.Der gültige Bereich für die Werte 0x8000 zu 0xDFFF Symbol ist.

_APS_NEXT_CONTROL_VALUE ist der folgende Wert des Symbols für ein Dialogfeld für verwendet wird.Der gültige Bereich für steuer Dialogfeld Symbol Werte sind 8 und 0xDFFF.

_APS_NEXT_SYMED_VALUE ist der folgende Symbol ausgegeben, der Wert wird angezeigt, wenn Sie einen Wert für Symbole manuell mithilfe des neuen Befehls im Symbol-Browser zuweisen.

Visual C++-Anfänge mit etwas höheren Werten, die der niedrigste gültige diesen Wert werden, wenn eine neue RC-Datei erstellt wird.Anwendungs-Assistent initialisiert zudem diese Werte zu etwas, das für MFC-Anwendungen entsprechender ist.Weitere Informationen über Bereiche finden Sie bei IDs Technischer Hinweis 20.

Für jedes Mal, wenn Sie eine neue Ressourcendatei, sogar in erstellen, definiert das gleiche Projekt mit Visual C++ die gleichen _APS_NEXT_-Werte.Dies bedeutet, dass, wenn Sie mehrere wir z. B. in zwei verschiedenen Dialogfelder hinzufügen, .RC-Dateien es sehr wahrscheinlich ist, dass der gleiche #define Wert in verschiedenen Dialogfeldern zugewiesen wird.Beispielsweise würde IDD_MY_DLG1 in der ersten RC-Datei die gleiche Zahl 101 als sofort RC-Datei IDD_MY_DLG2 zugewiesen werden.

Um dies zu vermeiden, sollten Sie einen anderen numerischen Bereich für jede der vier Domänen von IDs in den jeweiligen .RC-Dateien reservieren.Führen Sie dies manuell die _APS_NEXT-Werte in jeder der .RC-Dateien before aktualisieren, das Sie beim Hinzufügen von Ressourcen zu starten.Wenn beispielsweise die ersten RC-Datei die standardmäßige _APS_NEXT-Werte verwendet, können Sie die folgenden _APS_NEXT-Werte an die zweite RC-Datei zuweisen:

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

Natürlich ist es immer noch möglich, dass Visual C++ so viel IDs in der ersten RC-Datei zuweist, die die numerischen Werte starten, um die überlappend, die für die zweite RC-Datei reserviert sind.Sie sollten so umfangreiche Bereiche reservieren, damit dies nicht der Fall.

Abhängigkeiten zwischen .RC Verwalten, und .CPP. H-Dateien

Wenn Visual C++ eine RC-Datei enthält, spart dadurch auch Änderungen an der entsprechenden RESOURCE.H-Datei Symbol.Alle .CPP-Dateien, die die Ressourcen in der RC-Datei verweisen, müssen, RESOURCE.H-Datei #include die normalerweise aus der Headerdatei des Projekts.Dies führt zu einem unerwünschten Nebeneffekten aufgrund eines internen Projektmanagements der Entwicklungsumgebung, die Quelldateien für Header von Abhängigkeiten überprüft.Jedes Mal, wenn Sie ein neues Symbol in Visual C++ hinzufügen, die ganze RESOURCE.H #include die CPP-Datei, erneut kompiliert werden müssen.

Visual C++, umgeht die Abhängigkeit von RESOURCE.H, indem Sie den folgenden Kommentar enthält, z. B. die erste Zeile der RESOURCE.H-Datei:

//{{NO_DEPENDENCIES}}

Die Entwicklungsumgebung interpretiert diesen Kommentar, indem sie die Änderungen an RESOURCE.H ignoriert, damit abhängige .CPP-Dateien nicht neu kompiliert werden müssen.

Visual C++ fügt jeder Kommentarzeile hinzu NO_DEPENDENCIES}} {{//einer RC-Datei, wenn sie die Datei gespeichert wird.In einigen Fällen führt die Verhinderung der Buildabhängigkeit auf RESOURCE.H zu Laufzeitfehlern, die die zur Verknüpfungszeit unentdeckt sind.Wenn Sie beispielsweise den Symbol-Browser verwenden, um den numerischen Wert ändern, der auf ein Symbol für eine Ressource zugeordnet wird, wird die Ressource nicht ordnungsgemäß an der Anwendung gesucht und Runtime geladen, wenn die CPP-Datei, die die Ressource verweist, nicht neu kompiliert werden.In solchen Fällen können Sie explizit kompilieren Sie alle .CPP-Dateien betroffen sind, die über die Änderungen des Symbols in RESOURCE.H oder auswählen Alles neu erstellen wissen.Wenn Sie die Anforderung haben, Symbol Attributwerte für eine bestimmte Gruppe von Ressourcen häufig ändern, ist es möglicherweise einfacher und sicherer, diese Symbole in eine separate schreibgeschützte Headerdatei auszubrechen, wie im obigen Abschnitt Einschließen von Headerdateien zusätzliche beschrieben.

Wie Visual C++ verwaltet, schließt Satz von Informationen

Wie oben erläutert, enthält der Satz Befehl im Menü Datei können Sie drei Typen von Informationen an:

  • Symbol-Headerdatei

  • Schreibgeschützte Symbol-Direktive

  • Kompilierzeitdirektive

Im Folgenden wird beschrieben, wie Visual C++ diese Informationen in einer RC-Datei enthält.Sie benötigen diese Informationen nicht, um Visual C++ zu verwenden, doch es möglicherweise verbessert, sodass Sie Ihr Verständnis der Gruppe sicher Funktion einfügen können.

Jeder der oben genannten drei Typen des Datensatzes umfasst Informationen in einer RC-Datei in zwei Varianten: (1) als #include oder eine andere Direktive erklärbar vom Ressourcencompiler und (2) als spezielle TEXTINCLUDE-Betriebsmittel erklärbar nur von Visual C++.

Der Zweck der TEXTINCLUDE-Ressource sicher ist Satz-Einschliessungs Speichern von Informationen in einem Formular, die in Visual C++ Includes festlegen Dialogfeld bereit ansehnlich ist.TEXTINCLUDE ist ein Ressourcentyp, der von Visual C++ definiert ist.Visual C++ erkennt drei bestimmte TEXTINCLUDE-Betriebsmittel, die die Ressourcen-ID 1, 2 und 3 aufweisen:

TEXTINCLUDE-Ressourcen-ID

Typ des Datensatzes umfasst Informationen

1

Symbol-Headerdatei

2

Schreibgeschützte Symbol-Direktive

3

Kompilierzeitdirektive

Jede der drei Typen des Datensatzes enthält Informationen über den Standardwert MYAPP.RC wird veranschaulicht RESOURCE.H-Dateien und vom Anwendungs-Assistenten erstellt werden, wie im Folgenden beschrieben ein.Die zusätzliche \ 0 " und "" Token zwischen BEGIN- und ENDEN-Blöcken werden durch die RC-Syntax Zeichenfolgen und beendete null erforderlich, die jeweils doppeltes Anführungszeichen angeben.

Symbol-Headerdatei

Das Format der Symbol-Headerdatei Informationen, die vom Ressourcencompiler interpretiert werden, ist eine einfach #include Anweisung:

#include "resource.h"

Die entsprechende TEXTINCLUDE-Ressource ist:

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

Schreibgeschützte Symbol-Direktive

Schreibgeschützte Symbol-Direktive werden am oberen Rand MYAPP.RC in der folgenden Form enthalten, die vom Ressourcencompiler: erklärbar

#include "afxres.h"

Die entsprechende TEXTINCLUDE-Ressource ist:

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

Kompilierzeitdirektive

Kompilierzeitdirektive werden am Ende der MYAPP.RC in der folgenden Form enthalten, die vom Ressourcencompiler: erklärbar

#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

Mit der #ifndef APSTUDIO_INVOKED Direktive weist Visual C++ auf, um über Kompilierzeitdirektiven zu überspringen.

Die entsprechende TEXTINCLUDE-Ressource ist:

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

Siehe auch

Weitere Ressourcen

Technische Hinweise durch Zahl

Technische Hinweise nach Kategorie