Kurz Visual C++ (5.) Po delší době je tu nová lekce o vývojovém prostředí VC++. Lekce je rozdělena na dvě části, přičemž první část bude o editoru VC++. Dozvíte se například, jak lze formátovat text a co všechno se dá nastavit pro IDE. V druhé části se zaměříme na dynamické knihovny a na správu větších projektů. Dovíte se, jak vkládat další projekty do stávajícího projektu a zajistit, aby se kompilovaly ty správné projekty. 5.1 Editor Visual C++ZáložkyZáložky jsou velmi účinným prostředkem pro navigaci v souboru. Používají se pro
rychlý přístup k nejpoužívanějším řádkám zdrojového kódu
(klávesovou zkratkou). Existují dva typy záložek: pojmenované a nepojmenované. Hlavní rozdíl mezi nimi je, že pojmenované záložky
se zachovávají i po uzavření projektu a jeho opětovném otevření, ale nepojmenované ne. Výhodou nepojmenovaných záložek ale je, že je
lze nastavit rychle nastavit (klávesovou zkratkou Oproti tomu pro nastavení pojmenovaných záložek použijte klávesovou zkratku Pro přechod na záložku použijte klávesové zkratky Pohyb mezi závorkamiVe zdrojovém kódu jsou velmi časté konstrukce uzavřené mezi závorkami. Může se jednat o bloky kódu uzavřené ve složených závorkách, nebo o
struktury s kulatými závorkam ve výrazech, ve kterých je někdy velmi špatná orientace, kdy nemůžeme najít zavírací závorku k otevírací. Visual C++
toto řeší velice jednoduchým způsobem: pokud je kurzor před nějakou závorkou (ať už otevírací nebo zavírací) je možné najít její pár
klávesovou
zkratkou Podmínky preprocesoruPoužíváte-li podmíněný překlad pomocí podmínkových direktiv preprocesoru, můžete pro rychlý přesun mezi direktivami používat klávesové zkratky
Další možnosti hledání
Tyto klávesové zkratky (až na Informace pro prohledávání jsou mnohem výkonnější, pomocí nich je možné nechat si zobrazit strukturu zdrojového kódu. Tato možnost je dostupná
přes klávesovou zkratkou Dialog Go ToNechcete-li používat klávesové zkratky, můžete vyvolat dialog Go To klávesovou zkratkou Další zajímavé klávesové zkratkySestavení a překlad
Editor
5.2. Dynamicky linkované knihovny - DLLTato část o DLL není pro ty, kteří se chtějí dozvědět, jak pracují DLL, ale pro ty, kteří chtějí vědět, jak DLL vytvořit a jak ji zakomponovat do stávajícího projektu, případně jak pracovat s jejími exportovanými funkcemi či třídami. To znamená, že zde nebudu vysvětlovat jakým způsobem se DLL připojuje k hlavnímu programu a ani zde nebudu vysvětlovat vnitřní strukturu DLL. 5.2.1 Typy projektů DLLVe Visual C++ máme hned několik typů dynamických knihoven, které můžeme vytvořit. Výsledné knihovny jsou velice podobné, ale odlišný je způsob jejich programování a odlišné jsou také schopnosti knihovny. Za prvé můžete vytvořit Win32 DLL, to je tak úplně nejzákladnější knihovna, která ovšem neumí pracovat s MFC. Dále můžete vytvořit knihovnu s podporou MFC, ale ty se dále dělí na dva druhy. MFC knihovna může být buď běžná (regular) nebo rozšiřující (extension). Běžná knihovna navíc může linkovat MFC knihovny buď staticky nebo dynamicky, to je stejné jako u projektu EXE (o statickém a dynamickém linkování MFC knihoven byla řeč v minulosti). Jinak knihovna Win32 a běžná DLL MFC se od sebe liší jen málo, samozřejmě podstatný rozdíl je v používání MFC, ale jinak jsou identické. Rozdílná je ovšem rozšířená knihovna DLL. 5.2.2. Běžná versus rozšířená DLLRozšířená knihovna narozdíl od běžné může exportovat třídy, členské funkce, přetížené funkce apod., zkrátka podporuje objektové C++. Tohle všechno běžná knihovna neumožňuje a můžete tak exportovat pouze C funkce. Pokud ale budete chtít knihovnu použitelnou i z jiného programovacího prostředí, měli byste použít běžnou knihovnu. Další je rozdíl ve vyhledávání zdrojů (resources - dialogy, bitmapy, kursory apod.). Pokud máte uložený nějaký zdroj v rozšířené knihovně a tento zdroj má v programu unikátní ID, pak ho program najde. Program se totiž nejdříve podívá, zda-li nemá hledaný zdroj u sebe, pokud ne, hledá v rozšířených knihovnách připojených k tomuto programu, nakonec hledá zdroje v knihovnách MFC. Pokud se ID opakují ve vašem programu a v knihovně, pak se použije zdroj z programu a ne z knihovny! Běžné knihovny se neprohledávají. 5.2.3. PříkladVýsledkem této lekce bude projekt, který obsahuje program EXE a jednu rozšiřující knihovnu. Zkusíme si vytvořit jednoduchou třídu a tu exportovat. Navíc si ukážeme, jak ve VC++ nastavit projekt tak, aby se rozšiřující knihovna linkovala k našemu program EXE. Nyní si vytvoříme tzv. Blank Workspace, což je úplně prázdný
projekt, který neobsahuje žádný pod projekt. Je to snadné! V menu File
vyberte New. Na následujícím dialogu zvolte Workspaces a
zde Blank Workspace. Vepište jméno do příslušného okénka a
stiskněte OK. Všimněte si, že v Classview nevidíte zatím nic.
Zvolte MFC Extension DLL a Finish! Nyní vidíte v ClassView zásadní rozdíl. Projekt se přidal k našemu programu, takže máte dva projekty v jednom workspace. Ve workspace může být jen jeden projekt aktivní (to je ten, který se kompiluje a spustí po stisku F5). K tomuto aktivním projektu se kompilují ty projekty, které jsou potřeba pro správný běh aktivního projektu. Jak nastavíme, který projekt závislý na kterém? Velice snadno. VC++ má toto nastavení přímo v sobě. Ve menu Project zvolte položku Dependencies (závislosti): V prvním okénku zvolte projekt, který chcete modifikovat (tj. projekt,
která má být na někom závislý). V druhém okénku pak vidíte, na kom
aktuální projekt může být závislý. My zde máme pouze Knihovnu, takže tu
zaškrtněte a dejte OK. Kdybyste nyní označili jako aktuální Knihovnu,
zjistili byste, že již nemůže být závislá na Programu. To je logické. Když
je Program závislý na Knihovně, nemůže být zároveň Knihovna závislá na
Programu. Lze tedy nastavit jen jednosměrnou závislost. Toto nastavení
závislosti za prvé způsobí, že se bude kompilovat projekt Knihovny
kdykoliv, kdy budete kompilovat Program, čili program se nespustí, aniž by
se nejdříve nevytvořila Knihovna. Zadruhé způsobí to, že knihovna je
automaticky přilinkována k Programu tzn., že budete moci používat exporty
Knihovny v Programu.
Poznámka: Makro AFX_EXT_CLASS můžete využít i při exportu funkcí. Zkrátka vložte makro vložte buď před funkci nebo mezi návratovou hodnotu a jméno funkce, tím se stává funkce viditelná pro okolní projekty. Dejte si ale pozor, abyste vložili hlavičkový soubor funkce do projektu, kde ji chcete použít. Výše uvedené makro se už postará, aby funkce byla importována. Makro využívá konstanty, které jsou definovány pouze v rozšířené knihovně. Z toho plyne, že nejde použít v běžné DLL.
Příklad k této lekci si můžete stáhnout v sekci Downloads. Možná na vás tento příklad bude přespříliš složitý, protože jsme ještě nedělali dialogy apod., ale to hlavní tam jistě najdete. Děkujeme za pozornost a u dalšího dílu se těšíme nashledanou.© 2001
|