Wskazówki: tworzenie i używanie biblioteki dołączanej dynamicznie (C++)
Niniejszy przewodnik krok po kroku przedstawiono sposób tworzenia dołączana dynamicznie biblioteka (DLL) do użycia w aplikacji języka C++.Przy użyciu biblioteki to doskonały sposób na wielokrotne wykorzystywanie kodu.Zamiast ponownego wykonania tej samej procedury w każdy program, który można utworzyć, zapisywania ich jeden raz, a następnie odwołać się do nich z aplikacji, które wymagają funkcji.Umieszczenie kodu w pliku DLL, Zapisz miejsca w każdej aplikacji, która odwołuje się on i bez konieczności ponownego kompilowania wszystkich aplikacji można zaktualizować pliku DLL.Aby uzyskać więcej informacji na temat biblioteki dll, zobacz Biblioteki DLL w programie Visual C++.
Niniejszy przewodnik obejmuje następujące zadania:
Tworzenie projektu DLL.
Dodaje klasę do biblioteki DLL.
Tworzenie aplikacji konsoli, który używa czasu ładowania dynamiczne połączeń można odwołać pliku DLL.
Za pomocą funkcji klasy w aplikacji.
Uruchamianie aplikacji.
Niniejszy przewodnik tworzy DLL, które można wywołać tylko z aplikacji korzystających z języka C++ konwencji wywoływania.Aby uzyskać informacje o tworzeniu bibliotek DLL dla innych języków, zobacz Wywoływanie funkcji DLL z aplikacji języka Visual Basic.
Wymagania wstępne
W tym temacie założono, że rozumiesz podstawy języka C++.
Aby utworzyć projekt dołączana dynamicznie biblioteka (DLL)
W pasku menu wybierz Plik, Nowy, Projekt.
W lewym okienku nowy projekt okna dialogowego rozwiń zainstalowane, szablony, Visual C++, a następnie wybierz opcję Win32.
W środkowym okienku wybierz aplikacji konsoli Win32.
Określ nazwę projektu — na przykład MathFuncsDll — w nazwa pola.Określ nazwę dla rozwiązania — na przykład DynamicLibrary — w Nazwa rozwiązania pola.Wybierz OK przycisku.
Na omówienie strony Kreatora aplikacji Win32 okna dialogowego opcję dalej przycisku.
Na ustawienia aplikacji strony, w obszarze typ aplikacji, wybierz opcję biblioteki DLL.
Aby utworzyć projekt, kliknij przycisk Zakończ.
Aby dodać klasę do Biblioteka dołączana dynamicznie
Aby utworzyć plik nagłówka dla nowej klasy, paska menu, wybierz polecenie projektu, Dodaj nowy element.W Dodaj nowy element okna dialogowego w lewym okienku, Visual C++, wybierz opcję kod.W środkowym okienku wybierz nagłówka pliku (.h).Określ nazwę pliku nagłówka — na przykład wybierz MathFuncsDll.h—and Dodaj przycisku.Plik pusty nagłówek jest wyświetlany.
Dodaj następujący kod na początku pliku nagłówka:
// MathFuncsDll.h #ifdef MATHFUNCSDLL_EXPORTS #define MATHFUNCSDLL_API __declspec(dllexport) #else #define MATHFUNCSDLL_API __declspec(dllimport) #endif
Dodaj podstawowe klasy o nazwie MyMathFuncs do wykonywania typowych operacji matematycznych, takich jak dodawania, odejmowania, mnożenia oraz dzielenia.Kod powinien być podobny do tego:
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, MATHFUNCSDLL_API symbol zostanie ustawiony __declspec(dllexport) modyfikator w deklaracji funkcji elementu członkowskiego w tego kodu.Modyfikator umożliwia funkcji, które mają zostać wyeksportowane przez biblioteki DLL, aby można było użyć przez inne aplikacje.Gdy MATHFUNCSDLL_EXPORTS jest niezdefiniowana — na przykład, jeśli plik nagłówka znajduje się przez aplikację — definiuje MATHFUNCSDLL_API __declspec(dllimport) modyfikator w deklaracji funkcji elementu członkowskiego.Modyfikator optymalizuje importu funkcji w aplikacji.Domyślnie dodaje nowy projekt szablonu dla biblioteki DLL PROJECTNAME_EXPORTS do określonych symboli w projekcie biblioteki DLL.W tym przykładzie zdefiniowano MATHFUNCSDLL_EXPORTS podczas tworzenia projektu MathFuncsDll.Aby uzyskać więcej informacji, zobacz dllexport, dllimport.
[!UWAGA]
Jeśli tworzysz projekt biblioteki DLL w wierszu polecenia, użyj /D opcję kompilatora MATHFUNCSDLL_EXPORTS symbol.
W MathFuncsDll projektu w Eksploratora rozwiązań, w plikach źródłowych folderu, otwórz MathFuncsDll.cpp.
Implementuje funkcjonalność dla MyMathFuncs w pliku źródłowym.Kod powinien być podobny do tego:
// 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; } }
Kompiluj Biblioteka dołączana dynamicznie, wybierając tworzenie, tworzyć rozwiązania paska menu.
[!UWAGA]
Jeśli używasz Express edition, które nie są wyświetlane tworzenie menu paska menu, wybierz polecenie narzędzia, ustawienia, ustawienia eksperta ją włączyć, a następnie wybierz polecenie tworzenie, tworzyć rozwiązania.
[!UWAGA]
Jeśli tworzysz projekt w wierszu polecenia, użyj /LD kompilatora opcję, aby określić, że plik wyjściowy ma być biblioteki DLL.Aby uzyskać więcej informacji, zobacz /MD, /MT, /LD (Korzystaj z bibliotek wykonawczych).Użyj /EHsc kompilatora opcję, aby włączyć C++ obsługi wyjątków.Aby uzyskać więcej informacji, zobacz /EH (Model obsługi wyjątku).
Aby utworzyć aplikację, która odwołuje się do pliku DLL
Aby utworzyć aplikację C++, która będzie odwoływać się i biblioteki DLL nowo utworzony, paska menu, wybierz polecenie pliku, nowy, projektu.
W lewym okienku w obszarze Visual C++, wybierz opcję Win32.
W środkowym okienku wybierz aplikacji konsoli Win32.
Określ nazwę projektu — na przykład MyExecRefsDll — w nazwa pola.Obok rozwiązanie, wybierz opcję Dodaj do rozwiązania z listy rozwijanej.Spowoduje to dodanie nowego projektu do tego samego rozwiązania, który zawiera biblioteki DLL.Wybierz OK przycisku.
Na omówienie strony Kreatora aplikacji Win32 okna dialogowego opcję dalej przycisku.
Na ustawienia aplikacji strony, w obszarze typ aplikacji, wybierz opcję konsoli application.
Na ustawienia aplikacji strony, w obszarze dodatkowe opcje, usuń zaznaczenie nagłówka Precompiled pole wyboru.
Aby utworzyć projekt, kliknij przycisk Zakończ.
Aby korzystać z funkcji w bibliotece klas w aplikacji
Po utworzeniu aplikacji konsoli programu pusty jest tworzona.Nazwa pliku źródłowego jest taka sama jak nazwa, która została wybrana wcześniej.W tym przykładzie nosi MyExecRefsDll.cpp.
Do użycia w aplikacji procedury math, które zostały utworzone w pliku DLL, należy je wskazać.W tym celu należy wybrać projekt MyExecRefsDll w Eksploratora rozwiązań, a następnie paska menu, wybierz polecenie projektu, odwołuje się do.W stron właściwości okna dialogowego rozwiń wspólne właściwości węzła, wybierz opcję Framework i odwołuje się do, a następnie wybierz Dodaj nowe odwołanie przycisku.Aby uzyskać więcej informacji na temat odwołuje się do okno dialogowe, zobacz Szablon i odwołania, typowe właściwości, okno dialogowe Strony właściwości <Projectname>.
Dodaj odwołanie biblioteki, które można się odwołać Wyświetla okno dialogowe.Projektu karcie znajduje się lista projektów w bieżącym rozwiązaniu i wszystkie biblioteki, które zawierają.Na projektów kartę, zaznacz pole wyboru obok MathFuncsDll, a następnie wybierz OK przycisku.
Aby odwołać pliki biblioteki DLL nagłówka, należy zmodyfikować ścieżki uwzględniane katalogi.W tym celu w stron właściwości okna dialogowego rozwiń właściwości konfiguracji węzła, rozwiń węzeł C/C++ węzła, a następnie wybierz ogólne.Obok dodatkowych katalogów obejmują, określ ścieżkę do lokalizacji pliku nagłówka MathFuncsDll.h.Można użyć ścieżki względnej — na przykład...Wybierz \MathFuncsDll\—Then OK przycisku.
Teraz możesz używać 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; }
Tworzenie pliku wykonywalnego wybierając tworzenie, tworzyć rozwiązania paska menu.
Aby uruchomić aplikację
Upewnij się, że MyExecRefsDll jest wybierany jako domyślnego projektu.W Eksploratora rozwiązań, wybierz MyExecRefsDll, a następnie paska menu, wybierz polecenie projektu, jako projekt startowy.
Aby uruchomić projekt, w pasku menu wybierz funkcję Debuguj, Rozpocznij bez debugowania.Wynik powinien przypominać poniższe:
+ b = 106.4
- b =-91.6
- b = 732.6 / b = 0.0747475 Zgłoszony wyjątek: b nie może być zerem!
Zobacz też
Zadania
Przewodnik po programie Visual C++
Wskazówki: wdrażanie Twojego programu (C++)
Koncepcje
Biblioteki DLL w programie Visual C++
Wywoływanie funkcji DLL z aplikacji języka Visual Basic