Freigeben über


Exemplarische Vorgehensweise: Erstellen und Verwenden einer verwalteten Assembly (C++)

Eine verwaltete Assembly ist eine Art Bibliothek, die Sie erstellen können, um Code effizient wiederzuverwenden. Anstatt die gleichen Routinen in zahlreichen Programmen erneut zu implementieren, können Sie sie einmal schreiben und sie anschließend von Anwendungen verweisen, die diese Funktionen benötigen.

Diese exemplarische Vorgehensweise umfasst die folgenden Aufgaben:

  • Erstellen eines Klassenbibliotheksprojekts

  • Hinzufügen einer Klasse zur Klassenbibliothek

  • Erstellen einer Anwendung, die auf die Klassenbibliothek verweist

  • Verwenden von Funktionen der Klassenbibliothek in der Anwendung

  • Ausführen der Anwendung

Vorbereitungsmaßnahmen

Zur Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Grundkenntnisse in C++. Wenn Sie erst mit dem Erlernen von C++ beginnen, empfehlen wir "C++ Beginner's Guide" von Herb Schildt, verfügbar im Beginner Developer Learning Center auf der MSDN-Website.

So erstellen Sie ein Klassenbibliotheksprojekt

  1. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  2. Wählen Sie im Bereich Projekttypen unter Visual C++ die Option CLR aus.

    Von jedem Projekttyp in dieser Gruppe wird ein Projekt erstellt, das auf die Common Language Runtime (CLR) abzielt.

  3. Wählen Sie im Bereich Vorlagen den Eintrag Klassenbibliothek aus.

  4. Geben Sie im Feld Name einen Namen für das Projekt ein, z. B. "MathFuncsAssembly". Geben Sie im Feld Projektmappenname einen Namen für die Lösung (Projektmappe) ein, z. B. "ManagedAssemblies".

  5. Klicken Sie auf OK, um das Projekt zu erstellen.

  6. Standardmäßig wird ein Projekt bei seiner Erstellung für die Verwendung eines vorkompilierten Headers eingerichtet. Wählen Sie zum Deaktivieren des vorkompilierten Headers für das MathFuncsAssembly-Projekt im Projektmappen-Explorer das Projekt aus, und klicken Sie anschließend im Menü Projekt auf Eigenschaften. Erweitern Sie den Knoten Konfigurationseigenschaften, erweitern Sie den Knoten C/C++, und wählen Sie dann Vorkompilierte Header aus. Wählen Sie in der Liste neben Vorkompilierten Header erstellen/verwenden die Option Vorkompilierte Header nicht verwenden aus. Klicken Sie auf OK, um die Änderungen zu speichern. Weitere Informationen finden Sie unter Erstellen vorkompilierter Headerdateien.

So fügen Sie der Klassenbibliothek eine Klasse hinzu

  1. Nach dem Erstellen einer CLR-Klassenbibliothek generiert der Assistent eine Basisklasse für Sie. Die generierte Headerdatei und die Quelldatei besitzen jeweils den gleichen Namen wie das Projekt, dem dieser Name während der Erstellung des Projekts zugewiesen wurde. In diesem Beispiel erhalten sie die Namen MathFuncsAssembly.h und MathFuncsAssembly.cpp.

  2. Ersetzen Sie den vorhandenen Code in "MathFuncsAssembly.h" durch eine Basisklasse, die MyMathFuncsAssembly genannt wird. Von dieser Klasse werden allgemeine mathematische Vorgänge wie z. B. Addition, Subtraktion, Multiplikation und Division ausgeführt. Der Code entspricht in etwa dem folgenden Beispiel:

    // MathFuncsAssembly.h
    
    using namespace System;
    
    namespace MathFuncs
    {
        public ref class MyMathFuncs
        {
        public:
            // Returns a + b
            static double Add(double a, double b);
    
            // Returns a - b
            static double Subtract(double a, double b);
    
            // Returns a * b
            static double Multiply(double a, double b);
    
            // Returns a / b
            // Throws DivideByZeroException if b is 0
            static double Divide(double a, double b);
        };
    }
    
  3. Implementieren Sie die Funktionalität für MyMathFuncs in der Quelldatei. Der Code entspricht in etwa dem folgenden Beispiel:

    // MathFuncsAssembly.cpp
    // compile with: /clr /LD
    
    #include "MathFuncsAssembly.h"
    
    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 gcnew DivideByZeroException("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  4. Kompilieren Sie die Klassenbibliothek, indem Sie im Menü Erstellen auf Projektmappe erstellen klicken. Dadurch wird eine DLL (Dynamic Link Library) erstellt, die von anderen Programmen verwendet werden kann. Weitere Informationen über DLLs finden Sie unter DLLs.

So erstellen Sie eine Konsolenanwendung, die auf die Klassenbibliothek verweist

  1. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  2. Wählen Sie im Bereich Projekttypen unter Visual C++ die Option CLRaus.

  3. Wählen Sie im Bereich Vorlagen den Eintrag CLR-Konsolenanwendung aus.

  4. Geben Sie im Feld Name einen Namen für das Projekt ein, z. B. "MyExecRefsAssembly". Wählen Sie in der Liste neben Projektmappe die Option Hinzufügen aus, um das neue Projekt der Lösung hinzuzufügen, die die Klassenbibliothek enthält.

  5. Klicken Sie auf OK, um das Projekt zu erstellen.

  6. Deaktivieren Sie den vorkompilierten Header für das MyExecRefsAssembly-Projekt, indem Sie es im Projektmappen-Explorer auswählen und anschließend im Menü Projekt auf Eigenschaften klicken. Erweitern Sie den Knoten Konfigurationseigenschaften, erweitern Sie den Knoten C/C++, und wählen Sie dann Vorkompilierte Header aus. Wählen Sie in der Liste neben Vorkompilierten Header erstellen/verwenden die Option Vorkompilierte Header nicht verwenden aus. Klicken Sie auf OK, um die Änderungen zu speichern.

So verwenden Sie Funktionen der Klassenbibliothek in der Konsolenanwendung

  1. Nach dem Erstellen einer CLR-Konsolenanwendung generiert der Assistent ein Programm, von dem nur "Hello World" in die Konsole geschrieben wird. Die generierte Quelldatei besitzt den gleichen Namen wie das Projekt, dem dieser Name während der Erstellung des Projekts zugewiesen wurde. In diesem Beispiel erhält die Quelldatei den Namen MyExecRefsAssembly.cpp.

  2. Um die in der Klassenbibliothek erstellten mathematischen Routinen zu verwenden, müssen Sie auf die Bibliothek verweisen. Wählen Sie dazu das MyExecRefsAssembly-Projekt im Projektmappen-Explorer aus, und klicken Sie anschließend im Menü Projekt auf Eigenschaften. Erweitern Sie im Dialogfeld Eigenschaftenseiten den Knoten Allgemeine Eigenschaften, wählen Sie Framework und Verweise aus, und klicken Sie dann auf Neuen Verweis hinzufügen. Weitere Informationen finden Sie unter Framework und Verweise, Allgemeine Eigenschaften, Dialogfeld '<Projektname>-Eigenschaftenseiten'.

  3. Im Dialogfeld Verweis hinzufügen werden alle Bibliotheken aufgeführt, auf die Sie verweisen können. Die Registerkarte .NET listet die Bibliotheken auf, die in .NET Framework enthalten sind. Die Registerkarte COM listet alle COM-Komponenten auf dem Computer auf. Auf der Registerkarte Projekt werden alle Projekte in der aktuellen Projektmappe und sämtliche darin enthaltenen Bibliotheken aufgelistet. Wählen Sie auf der Registerkarte Projekte das Projekt MathFuncsAssembly aus, und klicken Sie dann auf OK.

    Tipp

    Sie können direkt in der Quelldatei auf eine Assembly verweisen, indem Sie die #using-Direktive verwenden (zum Beispiel #using <MathFuncsAssembly.dll>). Weitere Informationen finden Sie unter #using Directive (C/C++).

  4. Nun können Sie die MyMathFuncs-Klasse in dieser Anwendung verwenden. Ersetzen Sie in "MyExecRefsAssembly.cpp" den Inhalt der Dateifunktion durch den folgenden Code:

    // MyExecRefsAssembly.cpp
    // compile with: /clr /FUMathFuncsAssembly.dll
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
        double a = 7.4;
        int b = 99;
    
        Console::WriteLine("a + b = {0}",
            MathFuncs::MyMathFuncs::Add(a, b));
        Console::WriteLine("a - b = {0}",
            MathFuncs::MyMathFuncs::Subtract(a, b));
        Console::WriteLine("a * b = {0}",
            MathFuncs::MyMathFuncs::Multiply(a, b));
        Console::WriteLine("a / b = {0}",
            MathFuncs::MyMathFuncs::Divide(a, b));
    
        return 0;
    }
    
  5. Erstellen Sie die ausführbare Datei durch Klicken auf Projektmappe erstellen im Menü Erstellen.

So führen Sie die Anwendung aus

  1. Stellen Sie sicher, dass "MyExecRefsAssembly" als Standardprojekt ausgewählt wurde. Wählen Sie dazu im Projektmappen-Explorer "MyExecRefsAssembly" aus, und klicken Sie anschließend im Menü Projekt auf Als Startprojekt festlegen.

  2. Klicken Sie zum Ausführen des Projekts im Menü Debuggen auf Starten ohne Debugging. Die Ausgabe entspricht in etwa dem folgenden Beispiel:

    a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747474747474748
    

Nächste Schritte

Vorheriges Thema: Exemplarische Vorgehensweise: Erstellen und Verwenden einer statischen Bibliothek (C++). Nächstes Thema: Die nächsten Schritte (C++).

Siehe auch

Aufgaben

Einführung in Visual C++