Návod: Vytvoření a použití dynamické knihovny (C++)

Tento podrobný průvodce ukazuje, jak vytvořit dynamické knihovna (DLL) pro použití s aplikací C++.Použití knihovny je skvělým způsobem, jak znovu použít kód.Namísto opětovné implementace stejných rutin v každý program, který vytvoříte, je napsat jednou a potom je odkazovat z aplikací, které vyžadují funkci.Vložením kódu v knihovně DLL ušetřit místo v každé aplikace, který odkazuje na jeho a bez nutnosti opětovné kompilace všech aplikací, které lze aktualizovat knihovny DLL.Další informace o knihovny DLL, naleznete v části Knihovny DLL v jazyce Visual C++.

V tomto návodu se vztahuje na tyto úlohy:

  • Vytváření projektu knihovny DLL.

  • Přidání třídy do knihovny DLL.

  • Vytvoření aplikace konzoly, který používá čas načítání dynamické propojení k odkazování knihovny DLL.

  • Využití funkcí ze třídy v aplikaci.

  • Spuštění aplikace.

Tento průvodce vytvoří knihovnu DLL, kterou lze volat pouze z aplikací, které používají volání konvencí C++.Informace o tom, jak vytvořit knihovny DLL pro použití s jinými jazyky naleznete v tématu Volání funkcí knihovny DLL z aplikací jazyka Visual Basic.

Požadavky

Toto téma předpokládá, že jste pochopili základy jazyka C++.

Vytvořit projekt dynamická knihovna (DLL)

  1. Na řádku nabídek klikněte na položky Soubor, Nový, Projekt.

  2. V levém podokně nový projekt dialogové okno rozbalte nainstalované, šablony, **Visual C++**a potom vyberte Win32.

  3. V prostředním podokně vyberte aplikace konzoly Win32.

  4. Zadejte název pro projekt – například MathFuncsDll – v název pole.Zadejte název pro řešení – například DynamicLibrary – v název řešení pole.Zvolte OK tlačítko.

  5. Na přehled stránku Průvodce aplikací Win32 dialogové okno zvolte Další tlačítko.

  6. Na nastavení aplikace stránky v části typ aplikace, vyberte možnost DLL.

  7. Stisknutím tlačítka Dokončit vytvořte projekt.

Chcete-li přidat třídu do knihovny DLL

  1. Chcete-li vytvořit soubor hlaviček pro novou třídu, v nabídce, zvolte projektu, přidat novou položku.V přidat novou položku dialogové okno, v levém podokně pod položkou Visual C++, vyberte možnost kódu.V prostředním podokně vyberte soubor (hlaviček).Zadejte název souboru hlaviček – například, pak zvolte MathFuncsDll.h—and přidat tlačítko.Zobrazí se prázdné záhlaví souboru.

  2. Přidáte následující kód do začátku hlavičky souboru:

    // MathFuncsDll.h
    
    #ifdef MATHFUNCSDLL_EXPORTS
    #define MATHFUNCSDLL_API __declspec(dllexport) 
    #else
    #define MATHFUNCSDLL_API __declspec(dllimport) 
    #endif
    
  3. Přidáte základní třídu pojmenovanou MyMathFuncs k provádění běžných matematických operací, například sčítání, odčítání, násobení a dělení.Kód by měl vypadat takto:

    namespace MathFuncs
    {
        // This class is exported from the MathFuncsDll.dll
        class MyMathFuncs
        {
        public: 
            // Returns a + b
            static MATHFUNCSDLL_API double Add(double a, double b); 
    
            // Returns a - b
            static MATHFUNCSDLL_API double Subtract(double a, double b); 
    
            // Returns a * b
            static MATHFUNCSDLL_API double Multiply(double a, double b); 
    
            // Returns a / b
            // Throws const std::invalid_argument& if b is 0
            static MATHFUNCSDLL_API double Divide(double a, double b); 
        };
    }
    

    Pokud je symbol MATHFUNCSDLL_EXPORTS je definován, bude sada symbolů MATHFUNCSDLL_API __declspec(dllexport) modifikátor v deklaracích funkce člena v tomto kódu.Tento modifikátor umožňuje funkce, které budou exportovány knihovny DLL tak, aby mohou být využívána jinými aplikacemi.Pokud není definováno MATHFUNCSDLL_EXPORTS – například, když je soubor hlaviček zahrnuty ve aplikace – definuje MATHFUNCSDLL_API __declspec(dllimport) modifikátor v prohlášeních o funkce člena.Tento modifikátor optimalizuje import funkce v aplikaci.Ve výchozím nastavení, přidá nový projekt šablony pro knihovnu DLL PROJECTNAME_EXPORTS na definované symboly pro projekt knihovny DLL.V tomto příkladu je definován MATHFUNCSDLL_EXPORTS při sestavení projektu MathFuncsDll.Další informace naleznete v tématu dllexport, dllimport.

    [!POZNÁMKA]

    Pokud sestavujete projekt knihovny DLL na příkazovém řádku, použijte /D možnosti kompilátoru definujte MATHFUNCSDLL_EXPORTS symbol.

  4. V MathFuncsDll projekt v Průzkumníka řešenív zdrojové soubory složky, otevřete MathFuncsDll.cpp.

  5. Implementujte funkcionalitu MyMathFuncs ve zdrojovém souboru.Kód by měl vypadat takto:

    // MathFuncsDll.cpp : Defines the exported functions for the DLL application. 
    //
    
    #include "stdafx.h"
    #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 invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  6. Kompilaci knihovnu DLL volbou sestavení, sestavit řešení v nabídce.

    [!POZNÁMKA]

    Pokud používáte Express edition, který nemá zobrazovat sestavení nabídky v nabídce, zvolte nástroje, nastavení, Expert nastavení ji povolit, a poté zvolte příkaz sestavení, sestavit řešení.

    [!POZNÁMKA]

    Pokud sestavujete projekt na příkazovém řádku, použijte /LD možnosti kompilátoru k určení, že má být knihovna DLL výstupní soubor.Další informace naleznete v tématu /MD, /MT, /LD (Použít běhovou knihovnu).Použití /EHsc možnosti kompilátoru pro povolení zpracování výjimek C++.Další informace naleznete v tématu /EH (model zpracování výjimek).

Chcete-li vytvořit aplikace, která odkazuje na knihovnu DLL

  1. Chcete-li vytvořit aplikaci C++, která bude odkazovat a využívat knihovnu DLL, který jste vytvořili, v nabídce, zvolte soubor, nový, projektu.

  2. V levém podokně pod Visual C++, vyberte možnost Win32.

  3. V prostředním podokně vyberte aplikace konzoly Win32.

  4. Zadejte název pro projekt – například MyExecRefsDll – v název pole.Vedle řešení, vyberte možnost přidat řešení z rozevíracího seznamu.Přidá nový projekt do stejného řešení, která obsahuje knihovnu DLL.Zvolte OK tlačítko.

  5. Na přehled stránku Průvodce aplikací Win32 dialogové okno zvolte Další tlačítko.

  6. Na nastavení aplikace stránky v části typ aplikace, vyberte možnost konzoly aplikace.

  7. Na nastavení aplikace stránky v části další možnosti, zrušte předkompilované hlavičky zaškrtávací políčko.

  8. Stisknutím tlačítka Dokončit vytvořte projekt.

Chcete-li použít funkci z knihovny tříd v aplikaci

  1. Po vytvoření aplikace konzoly je vytvořen prázdný program.Název zdrojového souboru je stejný jako název, který jste zvolili dříve.V tomto příkladu je název MyExecRefsDll.cpp.

  2. Pokud chcete používat v aplikaci matematických rutin, které jste vytvořili v knihovně DLL, musí být uvedena.Chcete-li to provést, vyberte možnost projekt MyExecRefsDll v Průzkumníka řešenía v nabídce, zvolte možnost projektu, odkazuje na.V stránky vlastností dialogové okno rozbalte běžné vlastnosti uzel, vyberte možnost architektura a odkazy naa poté zvolte možnost přidat nový odkaz tlačítko.Další informace o odkazuje na dialogového okna, naleznete v části Architektura a odkazy, Společná nastavení, Dialogové okno Stránky vlastností projektu <Projectname>.

  3. Přidat odkaz dialogové okno obsahuje seznam knihoven, které lze odkazovat.Projektu karta seznam projektů v aktuálním řešení a všechny knihovny, které tyto soubory obsahují.Na projekty kartu, zaškrtněte políčko vedle MathFuncsDll a pak zvolte OK tlačítko.

  4. Chcete-li odkazovat na soubory hlaviček knihovny DLL, je třeba upravit cesty součástí adresáře.Chcete-li to provést, v stránky vlastností dialogové okno pole, rozbalte položku vlastnosti konfigurace uzel, rozbalte položku C/C++ uzel a potom vyberte Obecné.Vedle další adresáře zahrnout, zadejte cestu k umístění hlavičky MathFuncsDll.h.Můžete použít relativní cestu – například...Zvolte \MathFuncsDll\—Then OK tlačítko.

  5. Třídu MyMathFuncs lze nyní použít v této aplikaci.Nahraďte obsah MyExecRefsDll.cpp následující kód:

    // 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;
    
        try
        {
            cout << "a / 0 = " <<
                MathFuncs::MyMathFuncs::Divide(a, 0) << endl; 
        }
        catch (const invalid_argument &e) 
        {
            cout << "Caught exception: " << e.what() << endl; 
        }
    
        return 0;
    }
    
  6. Sestavte spustitelný soubor volbou sestavení, sestavit řešení v nabídce.

Ke spuštění aplikace

  1. Ujistěte se, že MyExecRefsDll je zvolen jako výchozí projekt.V Průzkumníka řešení, zvolte MyExecRefsDll a v nabídce, zvolte možnost projektu, nastavit jako projekt při spuštění.

  2. Kliknutím na položku Spustit bez ladění v nabídce Ladění spusťte projekt.Výstup by měl vypadat takto:

+ b = 106.4 -b =-91.6

  • b = 732.6 / b = 0.0747475 Zachycena výjimka: b nemůže být nula!

Viz také

Úkoly

Průvodce Visual C++

Návod: Nasazení programu (C++)

Koncepty

Knihovny DLL v jazyce Visual C++

Volání funkcí knihovny DLL z aplikací jazyka Visual Basic

Další zdroje

Nasazení aplikací (Visual C++)