Udostępnij za pośrednictwem


Instruktaż: Tworzenie i używanie biblioteki dołączanej dynamicznie (C++)

W tym instruktażu krok po kroku przedstawiono sposób tworzenia biblioteki dołączanej (dynamicznie DLL), do użytku z aplikacji C++.Przy użyciu biblioteki jest doskonałym sposobem ponownego użycia kodu.Zamiast re-implementing tej samej procedury w każdym programie, który tworzysz, napisz je jeden raz, a następnie odwoływać je z aplikacji, które wymagana jest funkcjonalność.Przez umieszczenie kodu w bibliotece DLL, oszczędzasz miejsce w każdej aplikacji, która odwołuje się do niej, a można zaktualizować biblioteki DLL bez konieczności ponownego kompilowania wszystkich aplikacji.Aby uzyskać więcej informacji na temat bibliotek DLL, zobacz Biblioteki DLL w programie Visual C++.

W tym instruktażu obejmuje następujące zadania:

  • Tworzenie projektu biblioteki DLL.

  • Dodanie klasy do biblioteki DLL.

  • Tworzenie aplikacji konsoli, które używa dynamicznego dołączania w czasie ładowania Aby odwołać się za biblioteki DLL.

  • Korzystanie z funkcji z klasy w aplikacji.

  • Uruchomiona aplikacja.

W tym instruktażu tworzy bibliotekę DLL, która może być wywołana tylko z aplikacje, które używają konwencji wywoływania języka C++.Aby uzyskać informacje o tworzeniu bibliotek DLL dla innych języków, zobacz Wywoływanie funkcji DLL z aplikacji Visual Basic.

Wymagania wstępne

W tym temacie założono, że rozumiesz podstawy języka C++.

Aby utworzyć projekt dołączanej biblioteki (DLL)

  1. Na pasku menu wybierz Plik, Nowy, projekt.

  2. W lewym okienku Nowy projekt okno dialogowe rozwiń Installed, Szablony, Visual C++, a następnie wybierz Win32.

  3. W środkowym okienku wybierz Win32 Console Application.

  4. Określ nazwę dla projektu — na przykład, MathFuncsDll — w Nazwa pole.Określ nazwę dla rozwiązania — na przykład, DynamicLibrary — w Nazwa rozwiązania pole.Wybierz przycisk OK.

  5. Na Omówienie strona Kreatora aplikacji Win32 okno dialogowe Wybierz Dalej przycisk.

  6. Na Ustawienia aplikacji strona pod Typ aplikacji, wybierz DLL.

  7. Wybierz polecenie Zakończ przycisk, aby utworzyć projekt.

Aby dodać klasę do biblioteki dołączane dynamicznie

  1. Aby utworzyć plik nagłówkowy dla nowej klasy, na pasku menu, wybierz polecenie Projekt, Add New Item.W Add New Item dialogowe, w oknie z lewej strony pod Visual C++, wybierz Kod.W środkowym okienku wybierz Plik nagłówkowy (.h).Określ nazwę dla pliku nagłówka — na przykład, następnie wybrać MathFuncsDll.h—and Dodaj przycisk.Zostanie wyświetlony plik pusty nagłówek.

  2. Dodaj następujący kod do początku pliku nagłówka:

    // MathFuncsDll.h
    
    #ifdef MATHFUNCSDLL_EXPORTS
    #define MATHFUNCSDLL_API __declspec(dllexport) 
    #else
    #define MATHFUNCSDLL_API __declspec(dllimport) 
    #endif
    
    
  3. Dodać podstawowe klasy o nazwie MyMathFuncs do wykonywania typowych działań matematycznych, takich jak dodawanie, odejmowanie, mnożenie i dzielenie.Kod powinien być podobna do poniższej:

    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); 
        };
    }
    

    Po zdefiniowaniu MATHFUNCSDLL_EXPORTS symbol ustawi MATHFUNCSDLL_API symbol __declspec(dllexport) modyfikator w deklaracji funkcji Członkowskich w tym kodzie.Ten modyfikator umożliwia funkcji, które mają zostać wywiezione przez bibliotekę DLL, tak aby mogły być używane przez inne aplikacje.Gdy MATHFUNCSDLL_EXPORTS jest niezdefiniowana, definiuje MATHFUNCSDLL_API __declspec(dllimport) modyfikator w deklaracji funkcji Członkowskich.Ten modyfikator umożliwia kompilatora zoptymalizować importowanie funkcji z biblioteki DLL do użycia w innych aplikacjach.Domyślnie MATHFUNCSDLL_EXPORTS definiuje się MathFuncsDll zostanie zbudowany.Aby uzyskać więcej informacji, zobacz dllexport, dllimport.

    [!UWAGA]

    Jeśli tworzysz projekt DLL w wierszu polecenia, użyj /D opcję kompilatora, aby zdefiniować MATHFUNCSDLL_EXPORTS symbol.

  4. W MathFuncsDll projektu w Solution Explorer, w Pliki źródłowe folderze, otwórz MathFuncsDll.cpp.

  5. Implementuje funkcjonalność dla MyMathFuncs w pliku źródłowym.Kod powinien być podobna do poniższej:

    // 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. Kompiluj Biblioteka dołączana dynamicznie wybierając budować, Budowania rozwiązania na pasku menu.

    [!UWAGA]

    Jeśli używasz Express edition, który nie wyświetla budować menu na pasku menu wybierz polecenie Narzędzia, Ustawienia, Expert Settings ją włączyć, a następnie wybierz polecenie budować, Budowania rozwiązania.

    [!UWAGA]

    Jeśli tworzysz projekt w wierszu polecenia, użyj /LD opcję kompilatora, aby określić, że plik wyjściowy ma być biblioteki DLL.Aby uzyskać więcej informacji, zobacz / /LD MD, /MT, (Użyj Run-Time Library).Użycie /EHsc opcję kompilatora, aby włączyć obsługę wyjątków C++.Aby uzyskać więcej informacji, zobacz /Eh (Model obsługi wyjątków).

Aby utworzyć aplikację, która odwołuje się do biblioteki DLL

  1. Aby utworzyć aplikacji C++, który będzie odwołać i użycie biblioteki DLL, nowo utworzony, na pasku menu wybierz polecenie pliku, New, Projekt.

  2. W lewym okienku w obszarze Visual C++, wybierz Win32.

  3. W środkowym okienku wybierz Win32 Console Application.

  4. Określ nazwę dla projektu — na przykład, MyExecRefsDll — w Nazwa pole.Obok roztwór, wybierz Dodaj do rozwiązania, z listy rozwijanej.Spowoduje to dodanie nowego projektu do tego samego roztworu, który zawiera bibliotekę DLL.Wybierz przycisk OK.

  5. Na Omówienie strona Kreatora aplikacji Win32 okno dialogowe Wybierz Dalej przycisk.

  6. Na Ustawienia aplikacji strona pod Typ aplikacji, wybierz aplikacji konsoli.

  7. Na Ustawienia aplikacji strona poniżej dodatkowe opcje, wyraźnym nagłówka Precompiled pole wyboru.

  8. Wybierz polecenie Zakończ przycisk, aby utworzyć projekt.

Aby używać funkcji z biblioteki klas w aplikacji

  1. Po utworzeniu aplikacji konsoli pusty program jest tworzony.Nazwa źródłowego pliku jest taka sama jak nazwa, który został wybrany wcześniej.W tym przykładzie jest to o nazwie MyExecRefsDll.cpp.

  2. Aby używać w aplikacji procedury matematyczne, które utworzono w bibliotece DLL, należy wskazać je.Aby to zrobić, zaznacz projekt MyExecRefsDll w Solution Explorer, a następnie na pasku menu wybierz polecenie Projekt, odwołania.W Stron właściwości okno dialogowe rozwiń Typowe właściwości węzła, a następnie kliknij polecenie Wybierz Framework i odwołania do, a następnie wybierz polecenie Dodać nowe odwołanie przycisk.Aby uzyskać więcej informacji o odwołania okno dialogowe, zobacz Ramy i odniesienia, wspólnych właściwości <Projectname> Okno dialogowe właściwości strony.

  3. Dodaj odwołanie okno dialogowe wyświetla listę bibliotek, które można się odwoływać.Projekt karta zawiera listę projektów w bieżącym rozwiązaniu i żadnych bibliotek, które zawierają.Na Projekty kartę, zaznacz pole wyboru obok MathFuncsDll i następnie wybierz polecenie OK przycisk.

  4. Aby odwołać pliki nagłówkowe biblioteki DLL, należy zmodyfikować ścieżki uwzględniane katalogi.W tym celu, w Stron właściwości okno dialogowe rozwiń Właściwości konfiguracji węzła, rozwiń węzeł C/C++ węzła, a następnie wybierz Ogólne.Obok Dodatkowe katalogi, w których ta obejmuje, określ ścieżkę do lokalizacji pliku nagłówka MathFuncsDll.h.Można użyć ścieżki względnej — na przykład...Wybierz polecenie \MathFuncsDll\—Then OK przycisk.

  5. Można teraz użyć klasy MyMathFuncs w tej aplikacji.Zamień zawartość MyExecRefsDll.cpp z następującego kodu:

    // 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. Budowanie pliku wykonywalnego wybierając budować, Budowania rozwiązania na pasku menu.

Aby uruchomić aplikację

  1. Upewnij się, że MyExecRefsDll jest zaznaczone jako projekt domyślny.W Solution Explorer, wybierz MyExecRefsDll, a następnie na pasku menu wybierz Projekt, Jako projekt uruchamiania.

  2. Aby uruchomić projekt, na pasku menu, wybierz polecenie program Debug: polecenie, Start Without Debugging.Dane wyjściowe powinna być podobna do poniższej:

+ b = 106.4 b =-91.6 * b = 732.6 / b = 0.0747475 wyjątek Caught: b nie może być zerem!

Następne kroki

Poprzedni:Biblioteki DLL w programie Visual C++ | Dalej:Jak: tworzenie bibliotek klas

Zobacz też

Zadania

Visual C++ Guided Tour

Walkthrough: Deploying Your Program (C++)

Koncepcje

Biblioteki DLL w programie Visual C++

Wywoływanie funkcji DLL z aplikacji Visual Basic

Inne zasoby

Wdrażanie aplikacji biurowych (Visual C++)