Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die einfache Zeichenfolgenkomponente sieht in Managed Extensions for C++ folgendermaßen aus:
Auflistung 1. Komponente in Managed Extensions for C++ (CompVC.cpp)
#using <mscorlib.dll>
using namespace System;
namespace CompVC {
__gc public class StringComponent {
private:
String* StringsSet[];
public:
StringComponent() {
StringsSet = new String*[4];
StringsSet[0] = new String(L"Visual C++ String 0");
StringsSet[1] = new String(L"Visual C++ String 1");
StringsSet[2] = new String(L"Visual C++ String 2");
StringsSet[3] = new String(L"Visual C++ String 3");
}
String* GetString(int index) {
if ((index < 0) || (index >= StringsSet->Length)) {
throw new IndexOutOfRangeException();
}
return StringsSet[index];
}
__property int get_Count() { return
StringsSet->Length; }
};
};
Wie bereits erwähnt, verwenden Sie die namespace-Anweisung zum Erstellen eines neuen Namespace, der die erstellten Klassen einkapselt:
namespace CompVC {
Dieser Namespace kann geschachtelt und auf mehrere Dateien verteilt sein. Eine einzelne Quellcodedatei kann auch mehrere Namespaces enthalten, die nicht geschachtelt sind. Da der Namespace verwaltete und nicht verwaltete Klassen enthalten kann (im Gegensatz zu Namespaces in Visual Basic und Visual C#, die nur verwaltete Klassen enthalten können), verwenden Sie den Modifizierer __gc, um anzugeben, dass die StringComponent-Klasse verwaltet ist:
__gc public class StringComponent {
Diese Anweisung bedeutet, dass Instanzen von StringComponent nun von der Common Language Runtime erstellt und im Garbage Collection-Heap verwaltet werden. Sie hätten auch den Compilerschalter /clr verwenden können, um alle Klassen im Programm unabhängig davon, ob sie das Präfix __gc aufweisen oder nicht, in verwaltete Klassen umzuwandeln.
Der Klassenkonstruktor, der bei jeder Erstellung einer neuen Instanz der Klasse ausgeführt wird, hat denselben Namen wie die Klasse und keinen Rückgabetyp.
public:
StringComponent() {
Die GetString-Methode, die eine Ganzzahl annimmt und eine Zeichenfolge zurückgibt, lautet folgendermaßen:
String* GetString(int index) {
...
return StringsSet[index];
}
Die throw-Anweisung in der GetString-Methode kennzeichnet die laufzeitbasierte Ausnahmebehandlung:
throw new IndexOutOfRangeException();
Diese Anweisung erstellt ein neues Objekt vom Typ IndexOutOfRangeException und löst eine Ausnahme aus, die vom Aufrufer aufgefangen wird. Für die .NET-Ausnahmebehandlung ist erforderlich, dass alle Ausnahmen (einschließlich der von für den eigenen Gebrauch definierten) von System::Exception abgeleitet werden.
**Hinweis **Dieser Fehlerbehandlungsmechanismus ersetzt den auf hResult basierenden Fehlerbehandlungsmechanismus, der in vorherigen Versionen von COM verwendet wurde.
Abschließend erstellen Sie die schreibgeschützte Count-Eigenschaft:
__property int get_Count { return StringsSet->Count; }
Das Erstellen der neuen Managed Extensions for C++-Komponente ist etwas komplizierter:
cl.exe /clr /Zi /c CompVC.cpp
link.exe -dll /debug /nod:libcpmt.lib kernel32.lib mscoree.lib /out:..\bin\CompVC.dll CompVC.obj
Wie beim einfachen Managed Extensions for C++-Beispiel Hello World benötigen Sie den Schalter /clr, um den Compiler anzuweisen, eine .NET-Assembly mit verwaltetem Code zu erstellen.
Die Beispielkomponenten für dieses Lernprogramm werden aus praktischen Gründen in einem zum Quellcode relativen ..\Bin-Unterverzeichnis verwaltet. Sie müssen zum Kompilieren der Komponente an diesen Speicherort einfach mit Hilfe des /out-Parameters den qualifizierten Dateinamen angeben. Sie könnten die kompilierten Komponenten auch im Assemblycache platzieren, wenn sie von anderen Programmen verwendet werden. Auch wenn Sie eine Ausgabedatei mit der Dateinamenerweiterung .dll angegeben haben, benötigen Sie den zusätzlichen Schalter -dll, um anstelle einer ausführbaren Datei mit der Dateinamenerweiterung .dll eine DLL-Datei zu erstellen.
Siehe auch
Eine Komponente in Visual C# | Eine Komponente in Visual Basic | Clients für die einfachen Komponenten | Zusammenfassung des Lernprogramms für Entwicklung | Anhang A: Tools zum Durchsuchen von Namespaces