TN035: Použití více zdrojových souborů a hlavičkových souborů v jazyku Visual C++
[!POZNÁMKA]
Následující technická poznámka nebyla aktualizována, protože byla poprvé zahrnuta v dokumentaci online.V důsledku toho některé postupy a témata mohou být nesprávné nebo zastaralé.Pro nejnovější informace je vhodné vyhledat téma zájmu v dokumentaci online index.
Tato poznámka popisuje způsob, jakým editor prostředků Visual C++ podporuje více souborů prostředků a souborů záhlaví, které jsou sdíleny v jednom projektu nebo mezi více projekty, a jak můžete využít této podpory.Tato poznámka odpovídá na tyto otázky:
Když může chtít rozdělit projekt do více souborů prostředků nebo souborů záhlaví a jak to provedete?
Jak můžete sdílet společné záhlaví souboru .H mezi dva soubory .RC?
Jak rozdělíte zdroje projektu do více souborů .RC?
Jak jste vy (a nástroje) spravovali závislosti sestavení mezi soubory .RC, .CPP a .H?
Je třeba si uvědomit, že pokud přidáte do projektu další soubor prostředků, ClassWizard nerozpozná prostředky v přidaném souboru.
Tato poznámka je strukturována tak, aby na výše uvedené otázky odpovídala takto:
Overview of How Visual C++ Manages Resource Files and Header Files poskytuje přehled způsobu, jak vám příkaz Soubor prostředků obsahuje v Visual C++ umožní používat více souborů prostředků a hlavičkových souborů ve stejném projektu.
Analysis of AppWizard-created .RC and .H Files se zobrazí v souborech s více zdroji a záhlavími, které jsou používané aplikací vytvořené pomocí AppWizard.Tyto soubory slouží jako vhodný model pro další zdrojové soubory a soubory hlaviček, které byste mohli chtít přidat do projektu.
Including Additional Header Files popisuje, kde můžete chtít zahrnout více souborů záhlaví a poskytuje podrobné informace, jak postupovat.
Sharing a Header File Between Two .RC Files ukazuje, jak lze sdílet soubor hlavičky více soubory .RC v různých projektech, nebo případně ve stejném projektu.
Using Multiple Resource Files in the Same Project popisuje, kde můžete chtít projekt rozdělit do více souborů .RC a poskytuje podrobné informace, jak postupovat.
Enforcement of Non-Editable Visual C++ Files popisuje, jak můžete zajistit, aby VIsual C++ nemohlo upravit a neúmyslně změnit formát vlastního prostředku.
Managing Symbols Shared by Multiple Visual C++-Edited .RC Files popisuje, jak sdílet stejné symboly mezi více soubory .RC a jak se vyhnout přiřazení duplicitních číselných hodnot ID.
Managing Dependencies Between .RC, .CPP, and .H Files popisuje, jak se ve Visual C++ vyhnete zbytečným opakovaným kompilacím souborů CPP, které jsou závislé na souborech prostředků symbolů.
How Visual C++ Manages Set Includes Information poskytuje podrobné technické informace o jak Visual C++ uchovává informace o více (vnořených) souborech .RC a více souborů záhlaví, které jsou #include pomocí souboru .RC.
Přehled způsobu, jakým Visual C++ spravuje zdrojové soubory a soubory hlaviček
Visual C++ spravuje jeden soubor prostředků .RC a odpovídající.Soubor záhlaví .H jako dvojici těsně vázaných souborů.Když upravujete a ukládáte zdroje v souboru .RC, nepřímo upravte a uložte symboly v odpovídajícím souboru .H.Ačkoli můžete otevřít a upravit více souborů .RC najednou (použitím uživatelského rozhraní MDI Visual C++) pro všechny uvedené soubory .RC, nepřímo upravíte právě jeden odpovídající soubor záhlaví.
Hlavičkový soubor symbolů
Ve výchozím nastavení aplikace Visual C++ vždy pojmenuje odpovídající soubor záhlaví RESOURCE.H, bez ohledu na název souboru prostředků (například MYAPP.RC).Pomocí příkazu Prostředek zahrnuje z nabídky Zobrazení v aplikaci Visual C++ můžete změnit název tohoto souboru záhlaví aktualizací souboru záhlaví symbolu v dialogovém okně Sada zahrnuje.
Směrnice souborů jen pro čtení
Přestože Visual C++ edituje pouze jeden soubor záhlaví pro libovolný soubor .RC, Visual C++ podporuje odkazy na symboly, které jsou definovány v dalších souborech záhlaví jen pro čtení.Použitím příkazu Prostředek zahrnuje z nabídky Zobrazit v aplikaci Visual C++ můžete zadat libovolný počet dalších souborů záhlaví jen pro čtení jako směrnice symbolů jen pro čtení.Omezení Jen pro čtení znamená, že pokud přidáte nový prostředek do .RC souboru, můžete použít symbol definovaný v souboru hlaviček jen pro čtení; ale pokud prostředek odstraníte, symbol stále zůstává definovaný v souboru hlaviček jen pro čtení.Číselnou hodnotu přiřazenou symbolu, který je určen jen pro čtení, nelze změnit.
Směrnice času kompilace
Visual C++ podporuje také vnořené soubory prostředků, pokud jeden soubor .RC #include v jiném.Když upravujete daný soubor .RC pomocí aplikace Visual C++, všechny prostředky v souborech #include nejsou viditelné.Ale při kompilaci souboru .RC jsou také zkompilovány soubory #include'd.Použitím příkazu Prostředek zahrnuje z nabídky Zobrazit v aplikaci Visual C++ můžete zadat libovolný počet #include souborů .RC jako směrnice času kompilace.
Všimněte si, co se stane, pokud načtete do RC souboru v Visual C++, který #zahrnuje jiný RC soubor, který není zadán jako direktiva v době kompilace.Tato situace by mohla nastat při aktivaci souboru RC v Visual C++, který byl dříve spravován ručně pomocí textového editoru.Když Visual C++ čte #include soubor .RC, sloučí prostředky #include do nadřazeného souboru .RC.Při ukládání nadřazeného souboru .RC, účinný příkaz #include bude nahrazen prostředky #include.Pokud nechcete, aby k tomuto sloučení došlo, měli byste odebrat výpis #include z nadřazeného objektu souboru .RC před jeho načtením do Visual C++; potom pomocí Visual C++ přidat zpět stejný výpis #include jako příkaz Compile-Time.
Visual C++ uloží do souboru .RC tři druhy výše uvedených informací Sada obsahuje (Soubor záhlaví symbolu, směrnice symbolu jen pro čtení a směrnice pro čas kompilace) ve směrnicích #include a v prostředcích TEXTINCLUDE.Prostředky TEXTINCLUDE, podrobnosti implementace, které obvykle nepotřebujete řešit, jsou vysvětleny v tématu Jak spravuje Visual C++ sadu obsahující informace.
Analýza souborů .RC a .H vytvořených pomocí AppWizard
Zkoumání kódu aplikace vytvořeného pomocí AppWizard poskytuje přehled, jak Visual C++ spravuje více zdrojových souborů a souborů záhlaví.Ukázky kódu zkoumané níže jsou z aplikace MYAPP získané přes AppWizard pomocí výchozích možností.
Aplikace vytvořená průvodcem AppWizard používá více souborů prostředků a více souborů záhlaví, jak je patrné na obrázku níže:
RESOURCE.H AFXRES.H
\ /
\ /
MYAPP.RC
|
|
RES\MYAPP.RC2
AFXRES.RC
AFXPRINT.RC
Vztahy mezi těmito soubory můžete zobrazit pomocí příkazu Visual C++ File/Set Includes.
- MYAPP.RC
Soubor prostředků aplikace, který můžete upravit pomocí Visual C++.
RESOURCE.H je soubor záhlaví specifický pro aplikaci.Je vždy pojmenováno průvodcem AppWizard jako RESOURCE.H, konzistentně s výchozím pojmenováním souboru záhlaví Visual C++.#include pro tento soubor hlavičky je prvním příkazem v souboru prostředků (MYAPP.RC):
//Microsoft Visual C++ generated resource script
//
#include "resource.h"
- RES\MYAPP.RC2
Obsahuje prostředky, které nebudou upraveny pomocí aplikace Visual C++, ale budou součástí závěrečné kompilace souboru .EXE.AppWizard nevytvoří žádné takové prostředky ve výchozím nastavení, protože Visual C++ může upravit všechny standardní prostředky, včetně prostředku verze (nová funkce v této verzi).V případě, že chcete přidat vlastní formátované zdroje do tohoto souboru, AppWizard vygeneruje prázdný soubor.
Pokud používáte vlastní formátované prostředky, můžete je přidat do RES\MYAPP.RC2 a upravovat pomocí textového editoru Visual C++.
AFXRES.RC a AFXPRINT.RC obsahují standardní prostředky vyžadované některými funkcemi rozhraní.Stejně jako RES\MYAPP.RC2 jsou tyto dva soubory prostředků poskytované rozhraním #include'd na konci MYAPP.RC a jsou uvedeny ve směrnicích pro čas kompilace dialogového okna Nastavení obsahuje.Proto tyto prostředky pracovního rámce při úpravě MYAPP.RC v aplikaci Visual C++ přímo nezobrazujete ani neupravujete, ale jsou zkompilovány do binárního souboru RES a konečného souboru EXE aplikace.Další informace o standardních prostředcích rozhraní, včetně postupů pro jejich úpravu, naleznete v tématu Technická poznámka 23.
AFXRES.H definuje standardní symboly, jako například ID_FILE_NEW, používané rozhraním a používané specificky v AFXRES.RC.AFXRES.H také #include WINRES.H, který obsahuje podmnožinu WINDOWS.H, které jsou vyžadovány soubory .RC generovanými jazykem Visual C++ stejně jako AFXRES.RC.Symboly definované v souboru AFXRES.H jsou k dispozici při úpravách souboru prostředků aplikace (MYAPP.RC).Například ID_FILE_NEW se používá pro položku nabídky Nový soubor v prostředku nabídky v souboru MYAPP.RC.Tyto symboly definované v rámci rozhraní nelze změnit ani odstranit.
Včetně další souborů záhlaví
Aplikace vytvořené průvodcem AppWizard obsahují pouze dva soubory hlaviček: RESOURCE.H a AFXRES.H.Pouze RESOURCE.H je specifický pro aplikaci.Další soubory hlaviček určené jen pro čtení může být nutné přidat v následujících případech:
Soubor hlavičky pochází z externího zdroje nebo ho chcete sdílet mezi více projekty nebo více částí stejného projektu.
Soubor hlavičky obsahuje formátování a komentáře, které nechcete, ať Visual C++ změní nebo odfiltruje při uložení souboru.Například možná chcete zachovat #define, používající jako symbolickou aritmetiku, jako například:
#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)
Můžete zahrnout další soubory záhlaví jen pro čtení použitím příkazu Prostředek zahrnuje pro zadání příkazu #include jako druhou směrnici symbolů jen pro čtení, jako v:
#include "afxres.h"
#include "second.h"
Nový diagram vztahů souborů nyní vypadá takto:
AFXRES.H
RESOURCE.H SECOND.H
\ /
\ /
MYAPP.RC
|
|
RES\MYAPP.RC2
AFXRES.RC
AFXPRINT.RC
Sdílení souboru hlaviček mezi dvěma .RC soubory
Chcete soubor hlavičky sdílet mezi dvěma soubory .RC, které jsou v různých projektech, případně ve stejném projektu.Chcete-li tak učinit, jednoduše u obou souborů RC použijte pouze techniku směrnic pouze pro čtení popsanou výše.V případě, kdy dva soubory .RC jsou pro různé aplikace (různé projekty), výsledek je znázorněn v následujícím diagramu:
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
Případ, kdy druhý soubor záhlaví je sdílen dvěma .RC soubory ve stejné aplikaci (projektu), jsou popsány níže.
Použití více souborů prostředků v rámci stejného projektu
Visual C++ a kompilátor prostředků podporují více souborů .RC ve stejném projektu prostřednictvím #include v jednom souboru .RC v rámci jiného.Je povoleno vícenásobné vnoření.Mohou existovat různé důvody pro rozdělení zdrojů projektu do několika .RC souborů:
Je jednodušší spravovat velké množství prostředků mezi více členy projektového týmu, pokud rozdělíte prostředky do více souborů .RC.Pokud používáte balíček pro správu zdrojového kódu pro rezervování souborů a vrácení změn, rozdělení prostředků do více souborů .RC vám dá lepší kontrolu nad správou změn prostředků.
Pokud chcete použít direktivy preprocesoru, například #ifdef, #endif, a #define pro části prostředků, musíte je izolovat do prostředků jen pro čtení, které budou zkompilovány kompilátorem prostředku.
Součást souborů .RC bude načítat a ukládat rychleji v aplikaci Visual C++ než jeden složený soubor .RC.
Pokud chcete spravovat zdroje pomocí textového editoru v čitelné formě, je nutné jej uschovat ho v souboru .RC odděleně od toho, který upraví aplikace Visual C++.
Pokud potřebujete zachovat uživatelem definovaný zdroj v textové nebo binární formě, která je interpretovatelná pomocí jiného specializovaného editoru dat, měli byste jej zachovat v samostatném souboru .RC, aby aplikace Visual C++ nezměnila formát šestnáctkových dat.Prostředky souborů WAV (zvuk) v ukázce MFC Advanced Concepts SPEAKN jsou typickým příkladem.
Můžete #include SECOND.RC ve směrnicích času kompilace v dialogovém okně Nastavení zahrnuje:
#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
Výsledek je znázorněn v následujícím diagramu:
RESOURCE.H AFXRES.H
\ /
\ /
MYAPP.RC
|
|
RES\MYAPP.RC2
SECOND.RC
AFXRES.RC
AFXPRINT.RC
Pomocí direktiv času kompilace můžete uspořádat upravitelné a neupravitelné prostředky Visual C++ do více souborů .RC, kde "hlavní" MYAPP.RC neprovede žádnou akci, ale #include další soubory .RC.Pokud používáte soubor .MAK projektu Visual C++, pak byste měli vložit "hlavní" soubor .RC do projektu, aby všechny prostředky #include byly kompilovány s vaší aplikací.
Vynutí neupravitelné soubory Visual C++
Soubor RES\MYAPP.RC2 vytvořený přes AppWizard je příkladem souboru, který obsahuje prostředky, které nechcete, aby se náhodou načetly do Visual C++ a potom se zapsaly zpět se ztrátou informací o formátování.K ochraně proti tomuto vložte následující řádky na začátek souboru RES\MYAPP.RC2:
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Visual C++
#endif //APSTUDIO_INVOKED
Když Visual C++ kompiluje soubor .RC, definuje APSTUDIO_INVOKED stejně jako RC_INVOKED.Pokud struktura souborů AppWizard je poškozena a Visual C++ načte řádek #error výše, ohlásí závažnou chybu a přerušení čtení souboru .RC.
Správa symbolů sdílených více soubory .RC editovaných pomocí Visual C++
Při rozdělení prostředků do více souborů RC mohou vzniknout dva problémy, které je vhodné v aplikaci Visual C++ upravit samostatně:
Můžete sdílet stejné symboly napříč několika .RC soubory.
Musíte aplikaci Visual C++ pomoci v tom, aby nepřiřazovala stejné číselné ID do různým zdrojům (symbolům).
Následující diagram znázorňuje uspořádání .RC a .H souborů, které se zabývají prvním problémem:
MYAPP.RC
/ \
/ \
MYSTRS.H / MYSHARED.H \ MYMENUS.H
\ / / \ \ \
\ / / \ \ \
MYSTRS.RC MYMENUS.RC
V tomto příkladu prostředky řetězců jsou uloženy v jednom souboru prostředku, MYSTRS.RC a nabídky jsou uloženy v jiném, MYMENUS.RC.Některé symboly, například konkrétní příkazy, lze sdílet mezi dvěma soubory.Například ID_TOOLS_SPELL může být ID nabídky příkazu pro položku pravopisu v nabídce Nástroje; a může být také ID řetězce příkazového řádku zobrazeném rozhraním ve stavovém řádku hlavního okna aplikace.
Symbol ID_TOOLS_SPELL je uchováván ve sdíleném souboru hlavičky, MYSHARED.H.Tento sdílený soubor hlavičky upravujte ručně v textovém editoru. Neupravuje se přímo ve Visual C++.Ve dvou souborech prostředků MYSTRS.RC a MYMENUS.RC zadejte #include MYSHARED.H ve směrnicích jen pro čtení pro MYAPP.RC pomocí příkazu Zdroj obsahuje, jak bylo popsáno dříve.
Je nejvhodnější pro předvídání symbolu, který bude sdílet dříve, než se ho pokusíte použít k identifikaci všech prostředků.Přidejte symbol do souboru sdíleného záhlaví a pokud doposud nemáte sdílené záhlaví souboru #include'd ve směrnicích jen pro čtení pro soubor .RC, učiňte tak před použitím symbolu.Pokud jste nepředpokládali sdílení symbolu tímto způsobem, pak budete muset ručně (pomocí textového editoru) přesunout příkaz #define pro symbol z, řekněme, MYMENUS.H do MYSHARED.H před jeho použitím v MYSTRS.RC.
Při správě symbolů ve více souborech .RC, je také třeba pomoci Visual C++, aby nebyly přiřazeny stejné číselné hodnoty ID do různých prostředků (symbolů).Pro všechny uvedené v souboru .RC, Visual C++ postupně přiřadí ID do každé ze čtyř ID domén.Mezi relacemi úprav uchovává Visual C++ informace o posledním ID, které je přiřazeno ve všech doménách v souboru záhlaví symbolu pro soubor .RC.Zde je, jaké hodnoty APS_NEXT jsou určeny pro prázdný (nový) soubor .RC:
#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 je hodnota dalšího symbolu, která se použije pro zdroj dialogového okna, prostředku nabídky a podobně.Platný rozsah hodnot symbolů prostředků je 1–0x6FFF.
_APS_NEXT_COMMAND_VALUE je další hodnota symbolu, která bude použita pro identifikaci příkazu.Platný rozsah hodnot symbolů příkazu je 0x8000–0xDFFF.
_APS_NEXT_CONTROL_VALUE je další hodnota symbolu, která bude použita pro ovládání dialogu.Platný rozsah hodnot symbolů ovládacích prvků dialogu je 8–0xDFFF.
_APS_NEXT_SYMED_VALUE je hodnota dalšího symbolu, která bude vydána, když ručně přiřadíte hodnotu symbolu pomocí příkazu Nový v prohlížeči symbolů.
Visual C++ začíná s mírně vyššími hodnoty, než nejnižší platná hodnotu při vytváření nového souboru .RC.AppWizard také inicializuje tyto hodnoty na jinou, vhodnější, pro aplikace MFC.Další informace o rozsahu hodnot ID naleznete v části Technická poznámka 20.
Nyní pokaždé, když vytvoříte nový soubor prostředků, dokonce i v rámci jednoho projektu, Visual C++ definuje stejné hodnoty _APS_NEXT_.To znamená, že pokud chcete přidat například více dialogů ve dvou různých souborech RC, je vysoce pravděpodobné, že stejná hodnota #define bude přiřazena k jiným dialogům.Například IDD_MY_DLG1 v prvním souboru :RC může být přiřazeno stejné číslo, 101, jako IDD_MY_DLG2 ve druhém souboru .RC.
Pokud tomu chcete předejít, měli byste rezervovat samostatný číselný rozsah pro každou ze čtyř domén ID v příslušném souboru RC.Proveďte ruční aktualizaci hodnot _APS_NEXT v každém ze souborů .RC before než začnete přidávat zdroje.Například pokud první soubor .RC používá výchozí hodnoty _APS_NEXT, tak můžete přiřadit následující hodnoty _APS_NEXT do druhého souboru .RC:
#define _APS_NEXT_RESOURCE_VALUE 2000
#define _APS_NEXT_COMMAND_VALUE 42000
#define _APS_NEXT_CONTROL_VALUE 2000
#define _APS_NEXT_SYMED_VALUE 2000
Samozřejmě je stále možné, že Visual C++ přiřadí tolik ID v prvním .RC souboru, že se číselné hodnoty začnou překrývat s těmi, které byly vyhrazeny pro druhý .RC soubor.Měli byste si rezervovat dostatečně velké rozsahy, aby se to nestalo.
Správa závislostí mezi soubory .RC, .CPP a .H
Když Visual C++ uloží soubor .RC, také uloží změny symbolu do odpovídajícího souboru RESOURCE.H.Některé ze souborů .CPP, které odkazují na zdroje v souboru .RC, musí #include soubor RESOURCE.H, obvykle v rámci záhlaví souboru hlavního projektu.To vede k nežádoucím vedlejším účinkům kvůli interní správě projektu ve vývojovém prostředí, kdy se ve zdrojových souborech kontroluje závislost záhlaví.Pokaždé, když přidáte nový symbol v aplikaci Visual C++, bude třeba znovu zkompilovat celý soubor .CPP, který #include RESOURCE.H.
Visual C++ obchází závislost na RESOURCE.H zahrnutím následujícího komentáře jako první řádek souboru RESOURCE.H:
//{{NO_DEPENDENCIES}}
Vývojové prostředí interpretuje tento komentář ignorováním změn souboru RESOURCE.H, závislé .CPP soubory proto nebudou muset být překompilovány.
Visual C++ vždy přidá řádek komentáře //{{NO_DEPENDENCIES}} do souboru .RC při uložení souboru.V některých případech obcházení závislosti sestavení na souboru RESOURCE.H může vést k nedetekovaným chybám za běhu v době spojení.Například pokud použijete Prohlížeč symbolů ke změně číselné hodnoty přiřazené k symbolu pro prostředek, prostředek nebude správně nalezen a načten při spuštění aplikace, jestliže soubor .CPP vztahující se k prostředku není znovu zkompilován.V takových případech byste měli explicitně znovu kompilovat všechny soubory .CPP, o kterých víte, že jsou ovlivněny změnami v RESOURCE.H nebo vybrat Sestavit vše znovu.Pokud potřebujete často měnit hodnoty symbolů pro určitou skupinu zdrojů, pravděpodobně pro vás bude pohodlnější a bezpečnější rozdělit tyto symboly do samostatného souboru záhlaví jen pro čtení, jak je popsáno v předchozím oddílu Vložení dalších souborů záhlaví.
Jak spravuje Visual C++ sadu obsahující informace
Jak již bylo uvedeno výše, příkaz Nastavit v nabídce Soubor umožňuje určit tři typy informací:
Hlavičkový soubor symbolů
Směrnice souborů jen pro čtení
Směrnice času kompilace
Následující informace popisují, jak Visual C++ udržuje tuto informaci v .RC souboru.Tyto informace nepotřebujete, abyste mohli používat Visual C++, ale můžete tak získat lepší informace a přehled, abyste mohli s větší jistotou používat funkci Set Includes.
Každý z výše uvedených tří typů informací Set Includes je uložen v souboru .RC ve dvou formách: (1) jako #include nebo jiné směrnice interpretovatelné kompilátorem prostředku a (2) jako zvláštní prostředky TEXTINCLUDE interpretovatelné pouze pomocí Visual C++.
Účelem prostředku TEXTINCLUDE je bezpečně uložit informace Sada obsahuje ve formuláři, který je snadno prezentovatelný v dialogovém okně Sada obsahuje Visual C++.TEXTINCLUDE je typ prostředku definovaný přes Visual C++.Visual C++ rozpoznává tři specifické prostředky TEXTINCLUDE, které mají identifikační čísla prostředků 1, 2 a 3:
ID prostředku TEXTINCLUDE |
Typ sady obsahuje informace |
---|---|
1 |
Hlavičkový soubor symbolů |
2 |
Směrnice souborů jen pro čtení |
3 |
Směrnice času kompilace |
Každý ze tří typů informací Set Includes je znázorněn ve výchozím nastavení souborů MYAPP.RC a RESOURCE.H, které jsou vytvořeny pomoci AppWizard, jak je popsáno níže.Extra tokeny \0 a "" mezi bloky BEGIN a END jsou vyžadovány syntaxí RC pro zadání řetězců ukončených nulou a dvojitými uvozovkami (v uvedeném pořadí).
Hlavičkový soubor symbolů
Informace souboru hlavičky symbolu interpretované kompilátorem prostředků mají jednoduše podobu příkazu #include:
#include "resource.h"
Odpovídající prostředek TEXTINCLUDE je:
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
Směrnice souborů jen pro čtení
Direktivy symbolů jen pro čtení jsou zahrnuty na začátku MYAPP.RC ve tvaru interpretovatelném kompilátorem prostředku:
#include "afxres.h"
Odpovídající prostředek TEXTINCLUDE je:
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
Směrnice času kompilace
Direktivy kompilace času jsou zahrnuty na konci MYAPP.RC ve tvaru interpretovatelném kompilátorem prostředku:
#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
Direktiva #ifndef APSTUDIO_INVOKED instruuje Visual C++, že se mají přeskočit kompilační direktivy.
Odpovídající prostředek TEXTINCLUDE je:
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