Pom∞rn∞ Φast²m problΘm je vytvß°enφ vlastnφch DLL knihoven
ve Visual C++. A p°itom je to tak snadnΘ... (jak moc snadnΘ, to se dozvφte ve
Φty°ech pokraΦovßnφch miniserißlu o DLL knihovnßch). Zkusme si vytvo°it p°φklad,
kter² bude tvo°en jednou aplikacφ a dv∞ma DLL knihovnami, p°iΦem₧ ob∞ dv∞
knihovny budou obsahovat t°φdy na sob∞ zßvislΘ.
Nejprve se pustφme do generovßnφ. Musφme vytvo°it jednu EXE
aplikaci a dv∞ DLL knihovny. S aplikacφ nebude problΘm, hned v prvnφm kroku
generovßnφ (MFC AppWizzard(exe)) vybereme Finish a je to, MDI aplikace
pou₧φvajφcφ dokument/view nßm bude vyhovovat. Pro generovßnφ DLL pou₧ijeme MFC
AppWizzard(dll), kde zaÜkrtneme, ₧e chceme za°adit nov² projekt do p°echozφho
pracovnφho prost°edφ a upravφme cestu k projektu tak, aby dll knihovny nebyly ulo₧eny
v podadresß°i s aplikacφ, ale aby byly na stejnΘ adresß°ovΘ ·rovni.
S DLL ale bude dalÜφ problΘm - v prvnφm kroku musφme vybrat ze
t°φ voleb, jak je vid∞t na nßsledujφcφm obrßzku:
Poslednφ mo₧nost se od p°edchozφch liÜφ tφm, ₧e se automaticky
vytvß°φ seznam Runtime-classes a zdroj∙ z DLL, Φφm₧ je dßna mo₧nost p°istupovat
k t∞mto informacφm i z aplikace. AΦkoliv tento v²b∞r nenφ implicitnφ, ve v∞tÜin∞
p°φpad∙ bychom m∞li pou₧φvat prßv∞ tento typ DLL knihoven.
Po ·sp∞ÜnΘm vygenerovßnφ t°φ projekt∙ a p°idßnφ dvou
adresß°∙, bychom m∞li zφskat nßsledujφcφ adresß°ovou strukturu:
Adresß°e Debug a Release na hlavnφ ·rovni (v obrßzku jsou
podtr₧enΘ) p°idßme ruΦn∞ a prßv∞ v nich nelezneme v²slednΘ DLL soubory a EXE
aplikaci. Toto samoz°ejm∞ nebude samo sebou a budeme muset nastavit projekty tak,
abychom toto zajistili.
P°ed tφm, ne₧ si vysv∞tlφme dalÜφ nastavenφ, zkusφme si
objasnit, proΦ vlastn∞ adresß°e vytvß°et, a proΦ do nich kopφrovat v²slednΘ
soubory. P°edstavme si, ₧e ji₧ mßme vÜechny t°i projekty p°elo₧enΘ a
pokusφme se spustit aplikaci. Zjistφme, ₧e to nejde, proto₧e aplikace APP.EXE
nenalezne pot°ebnΘ DLL knihovny. Kde je problΘm? Windows toti₧ hledajφ DLL knihovny
podle standardnφ cesty, tedy zaruΦen∞ v sytΘmovΘm adresß°i a v dalÜφch
adresß°φch, jak je urΦeno sytΘmovou prom∞nnou PATH. Pomohlo by nastavit cestu do
adresß°∙ \Dll\First\Debug a \Dll\Second\Debug (resp. Release) nebo vzniklΘ DLL
knihovny kopφrovat do systΘmovΘho adresß°e. Ani jedna z obou mo₧nostφ mi
nep°ipadß v²hodnß, zkusφme to tedy jinak. OperaΦnφ systΘm toti₧ po₧adovanΘ DLL
knihovny hledß nejprvbe v akutßlnφm adresß°i. No a v tom to je! Ob∞ DLL i EXE
aplikaci nakopφrujeme do zvlßÜtnφho adresß°e (Debug nebo Release) a odtamtud ji
budeme spouÜt∞t, Φφm₧ je zajiÜt∞no, ₧e vÜe prob∞hne v po°ßdku. DalÜφ
v²hodou bude, ₧e pokud budeme chtφt p°enΘst v²sledek jinam, staΦφ vzφt adresß°
Debug nebo Release a je to.
Asi by bylo dost otravnΘ po ka₧dΘm p°ekladu provßd∞t
kopφrovßnφ soubor∙, ale to naÜt∞stφ nebude nutnΘ, proto₧e to za nßs ud∞lß
samotnΘ prost°edφ Visual C++. Pro tuto akci nßm pom∙₧e volba PostBuild Step
z nastavenφ projektu, kde mßme mo₧nost vykonat jakΘkoliv akce, kterΘ umo₧≥uje OS,
p°iΦem₧ tyto se provedou po ·sp∞ÜnΘm p°ekladu. Nenφ tedy problΘm, zadat
p°φkazy kopφrovßnφ. Pomocφ volby z menu Project/Settings nastavφme
v poslednφ zßlo₧ce volby Postbuild Commnads tak, aby dochßzelo ke
kopφrovßnφ v²sledn²ch soubor∙. Nesmφme zapomenout, ₧e akci musφme nastavit u
vÜech t°ech projekt∙, a taktΘ₧ pro ob∞ dv∞ nastavenφ - Debug a Release.
(Samoz°ejm∞, ₧e v p°φpad∞ nastavenφ Debug cφlov²m adresß°em bude Debug
a v p°φpad∞ Release bude cφlov²m adresß°em Release). P°φklad naleznete
na nßsledujφcφm obrßzku (t²kß se nastavenφ EXE aplikace):
Pokud bychom nynφ p°elo₧ili vÜechny t°i projekty, adresß° Debug
by m∞l obsahovat t°i soubory: First.dll, Second.dll a App.exe. Aby bylo nastavenφ
projekt∙ kompletnφ, musφme ud∞lat jeÜt∞ dva kroky.
P°edposlednφm nastavenφm bude vytvo°enφ zßvislostφ mezi
projekty. Ze zadßnφ vφme, ₧e Second.DLL je zßvisl² na First.DLL a App.EXE je
zßvisl² na Second.DLL. Bohu₧el to vφme jenom my a Visual C++ o tom nemß potuchy.
JednoduÜe mu to sd∞lφme pomocφ volby Project/Dependencies..., kdy se objevφ
nßsledujφcφ dialog, kde popφÜeme zßvislosti App->Second a Second->First:
┌pln∞ poslednφm krokem bude urΦenφ, kter² soubor se bude
pou₧φvat pro lad∞nφ. V souΦasnΘm okam₧iku mßme vlastn∞ dv∞ aplikace App.EXE, kdy
jedna je ulo₧ena v adresß°i \Dll\Debug (kam jsme ji kopφrovali) a \Dll\App\Debug (kde
vznikla b∞hem p°ekladu). Pot°ebujeme, aby se pou₧ila prvnφ jmenovanß mo₧nost,
proto₧e jinak bychom m∞li nßÜ znßm² problΘm s nenalezenφm DLL knihoven. V menu
nastavenφ projektu u EXE aplikaci zvolφme v druhΘ zßlo₧ce cestu ke spouÜt∞nΘm
adresß°i tak, aby ukazovala na kopφrovanou verzi aplikace.
To¥ pro dneÜek vÜe, projekt naleznete v sekci Download.
Abychom mohli vÜe ozkouÜet, nastavφme projekt App jako aktivnφ projekt a dßme Rebuild
All, kter² zajistφ, ₧e se p°elo₧φ vÜechny t°i projekty a v²sledky se
nakopφrujφ do pat°iΦn²ch adresß°∙. |