Podrobné pokyny: Vytvoření a použití dynamické knihovny (C++)
První typ knihovny, který vytvoříme, je dynamicky připojená knihovna (DLL). Použití knihovny DLL je skvělý způsob opětovného použití kódu. Pokud existují rutiny, které používáte ve více programech, stačí je napsat jednou a odkázat na ně z aplikace, která využívá jejich funkcionalitu.
Tento postup obsahuje následující:
Vytvoření nového Projektu dynamické knihovny DLL
Přidání třídy do knihovny DLL.
Vytváření aplikace odkazující na knihovnu DLL.
Využití funkcí z knihovny tříd v aplikaci konzoly.
Spuštění aplikace.
Požadavky
Toto téma předpokládá, že chápete základy jazyka C++. Pokud jste začali učení jazyka C++, doporučujeme Guide Začátečník C++"" Zapisovat Jahoda Schildt k dispozici online na https://go.microsoft.com/fwlink/?LinkId=115303.
Vytvoření nového Projektu dynamické knihovny DLL
V nabídce Soubor zvolte Nový a potom Projekt….
V podokně Typ projektu pod Visual C++ vyberte Win32.
V podokně Šablony zvolte Aplikace konzoly Win32.
Zvolte název projektu, jako například MathFuncsDll, a zadejte jej v poli Název. Zvolte název pro řešení, jako například DynamicLibrary, a zadejte jej do pole Název řešení.
Pro spuštění Průvodce aplikací Win32 klikněte na tlačítko OK. Na stránce Přehled dialogového okna Průvodce aplikací Win32 klikněte na Další.
Na stránce Nastavení aplikace Průvodce aplikací Win32, pod Typ aplikace, vyberte Knihovna DLL (pokud je k dispozici), nebo Aplikace konzoly, pokud Knihovna DLL není k dispozici. Některé verze aplikace Visual Studio nepodporují vytváření projektu knihovny DLL pomocí průvodců. Toto lze změnit později tak, aby se projekt kompiloval jako knihovna DLL.
Na stránce Nastavení aplikace Průvodce aplikací Win32, pod Další možnosti, zvolte Prázdný projekt.
Klikněte na Dokončit pro vytvoření projektu.
Přidání třídy do knihovny DLL
Chcete-li vytvořit soubor hlaviček pro novou třídu, vyberte z nabídky Projekt možnost Přidat novou položku.... Zobrazí se dialogové okno Přidat novou položku. V podokně Kategorie, pod Visual C++, zvolte Kód. V podokně Šablony, vyberte Soubor hlaviček (.H). Zvolte název souboru hlaviček, jako například MathFuncsDll.H a klikněte na tlačítko Přidat. Zobrazí se prázdný soubor.
Přidejte jednoduchou třídu pojmenovanou MyMathFuncs, která provádí běžné matematické operace, jako například sčítání, odčítání, násobení a dělení. Kód by měl vypadat takto:
// MathFuncsDll.h namespace MathFuncs { class MyMathFuncs { public: // Returns a + b static __declspec(dllexport) double Add(double a, double b); // Returns a - b static __declspec(dllexport) double Subtract(double a, double b); // Returns a * b static __declspec(dllexport) double Multiply(double a, double b); // Returns a / b // Throws DivideByZeroException if b is 0 static __declspec(dllexport) double Divide(double a, double b); }; }
Všimněte si modifikátoru __declspec(dllexport) v deklaracích metod v tomto kódu. Tento modifikátor umožňuje metodě být exportována v DLL, takže ji můžou použit jiné aplikace. Další informace naleznete v tématu dllexport, dllimport.
Chcete-li vytvořit zdrojový soubor pro novou třídu, vyberte z nabídky Projekt možnost Přidat novou položku.... Zobrazí se dialogové okno Přidat novou položku. V podokně Kategorie, pod Visual C++, zvolte Kód. V podokně Šablony zvolte Soubor C++ (.CPP). Zvolte název zdrojového souboru, jako například MathFuncsDll.CPP a klikněte na tlačítko Přidat. Zobrazí se prázdný soubor.
Implementujte funkcionalitu MyMathFuncs ve zdrojovém souboru. Kód by měl vypadat takto:
// MathFuncsDll.cpp // compile with: /EHsc /LD #include "MathFuncsDll.h" #include <stdexcept> using namespace std; namespace MathFuncs { double MyMathFuncs::Add(double a, double b) { return a + b; } double MyMathFuncs::Subtract(double a, double b) { return a - b; } double MyMathFuncs::Multiply(double a, double b) { return a * b; } double MyMathFuncs::Divide(double a, double b) { if (b == 0) { throw new invalid_argument("b cannot be zero!"); } return a / b; } }
Chcete-li sestavit projekt jako knihovnu DLL, z nabídky Projekt zvolte Vlastnosti… MathFuncsDll. V levém podokně, pod Vlastnosti konfigurace, zvolte Obecné. V pravém podokně změňte Typ konfigurace na Dynamická knihovna (.DLL). Kliknutím na OK uložíte změny.
Poznámka
Pokud sestavujete projekt z příkazové řádky, použijte možnost kompilátoru /LD pro určení, že výstupní soubor má být knihovna DLL. Další informace naleznete v tématu /MD, /MT, /LD (Use Run-Time Library).
Zkompilujte knihovnu DLL výběrem Sestavit řešení z nabídky Sestavit. Tím se vytvoří knihovna DLL, která může být použitá jinými programy. Další informace o knihovnách DLL naleznete v tématu Knihovny DLL.
Vytváření aplikace odkazující na knihovnu DLL.
Chcete-li vytvořit aplikaci, která bude odkazovat a využívat knihovnu DLL, kterou jste právě vytvořili, zvolte z nabídky Soubor možnost Nový a potom Projekt….
V podokně Typ projektu pod Visual C++ vyberte Win32.
V podokně Šablony zvolte Aplikace konzoly Win32.
Zvolte název projektu, jako například MyExecRefsDll, a zadejte jej v poli Název. Vedle Řešení zvolte z rozevíracího seznamu Přidat do řešení. Tím se nový projekt přidá do stejného řešení jako knihovna DLL.
Pro spuštění Průvodce aplikací Win32 klikněte na tlačítko OK. Na stránce Přehled dialogového okna Průvodce aplikací Win32 klikněte na Další.
Na stránce Nastavení aplikace Průvodce aplikací Win32, pod Typ aplikace, zvolte Aplikace konzoly.
Na stránce Nastavení aplikace Průvodce aplikací Win32, pod Další možnosti zrušte zaškrtnutí Předkompilovaná hlavička.
Klikněte na Dokončit pro vytvoření projektu.
Využití funkcí z knihovny tříd v aplikaci konzoly.
Po vytvoření nové aplikace konzoly je vytvořen prázdný program. Název zdrojového souboru je stejný jako název, který jste zvolili dříve pro projekt. V tomto příkladu je název MyExecRefsDll.CPP.
Pro použití matematických rutin, které byly vytvořeny v knihovně DLL, je třeba odkázat na knihovnu. Chcete-li to provést, zvolte projekt MyExecRefsDll v Průzkumníku řešení a pak zvolte Odkazy… z nabídky Projekt. V dialogovém okně Stránky vlastností rozbalte uzel Společná nastavení, zvolte Framework and Referencesa pak klikněte na tlačítko Přidat nové odkazy…. Další informace o dialogovém okně Odkazy… naleznete v tématu Architektura a odkazy, Společná nastavení, Dialogové okno <Projectname> Stránky vlastností.
Zobrazí se dialogové okno Přidat odkaz. Toto dialogové okno obsahuje seznam všech knihoven, které lze odkazovat. Karta Projekt obsahuje seznam všech projektů v aktuálním řešení a všechny knihovny, které obsahují. Na kartě Projekty vyberte MathFuncsDll. Poté klepněte na tlačítko OK.
Chcete-li odkazovat na soubory hlaviček knihovny DLL, je třeba změnit cesty adresáře začlenění. Chcete-li to provést, v dialogovém okně Stránky vlastností, rozbalte uzel Vlastnosti konfigurace, rozbalte uzel C/C++ a pak vyberte Obecné. Vedle Additional Include Directories zadejte cestu k umístění souboru hlavičky MathFuncsDll.H.
Spustitelný soubor nenačte knihovnu DLL před spuštěním. Je třeba říci systému kde najde MathFuncsDll.DLL. To provedete pomocí proměnné prostředí PATH. Chcete-li to provést, v dialogovém okně Stránky vlastností, rozbalte uzel Vlastnosti konfigurace a zvolte Ladění. Vedle Prostředí zadejte následující: PATH=<cesta k souboru MathFuncsDll.dll >, kde <cesta k souboru MathFuncsDll.DLL> je nahrazena aktuálním umístěním MathFuncsDll.DLL. Klepnutím na tlačítko OK změny uložte.
Poznámka
Chcete-li spustit soubor z příkazové řádky místo ze sady Visual Studio, je nutné ručně aktualizovat proměnnou prostředí PATH z příkazového řádku takto: set PATH=%PATH%;<cesta k souboru MathFuncsDll.dll >, kde <cesta k souboru MathFuncsDll.dll> je nahrazena aktuálním umístěním MathFuncsDll.DLL.
Třídu MyMathFuncs lze nyní použít v této aplikaci. Nahraďte obsah MyExecRefsDll.CPP následujícím kódem:
// MyExecRefsDll.cpp // compile with: /EHsc /link MathFuncsDll.lib #include <iostream> #include "MathFuncsDll.h" using namespace std; int main() { double a = 7.4; int b = 99; cout << "a + b = " << MathFuncs::MyMathFuncs::Add(a, b) << endl; cout << "a - b = " << MathFuncs::MyMathFuncs::Subtract(a, b) << endl; cout << "a * b = " << MathFuncs::MyMathFuncs::Multiply(a, b) << endl; cout << "a / b = " << MathFuncs::MyMathFuncs::Divide(a, b) << endl; return 0; }
Sestavte spustitelný soubor výběrem Sestavit řešení z nabídky Sestavení.
Spuštění aplikace
Ujistěte se, že MyExecRefsDll je zvolen jako výchozí projekt. V Průzkumníku řešení zvolte MyExecRefsDll a potom zvolte Set As StartUp Project z nabídky Projekt.
Chcete-li projekt spustit, zvolte Spustit bez ladění z nabídky Ladit. Výstup by měl vypadat takto:
a + b = 106.4 a - b = -91.6 a * b = 732.6 a / b = 0.0747475
Další kroky
Předchozí téma: Vytváření opakovaně použitelného kódu (C++) | Další téma: Podrobné pokyny: Vytvoření a použití statické knihovny (C++)
Viz také
Úkoly
Podrobné pokyny: Nasazení programu (C++)