Projekt-Instanzen mithilfe von Projekt-Factorys erstellen
Projekttypen in Visual Studiofactory Projekt verwenden, um Instanzen von Projektobjekten zu erstellen. Eine Projekt factory ist mit einer standardmäßigen klassenfactory für cocreatable einen sehr ähnlich. Projektobjekte sind jedoch nicht cocreatable: Sie können nur erstellt werden, indem eine Projekt factory verwenden.
Das Visual Studio IDE zeigt die Projekt factory in einem VSPackage implementieren, wenn ein Benutzer ein vorhandenes Projekt lädt oder ein neues Projekt in Visual Studioerstellt. Das neue Projektobjekt stellt die IDE mit genügend Informationen, um Projektmappen-Explorer zu füllen. Das neue Projektobjekt stellt auch die erforderlichen Schnittstellen zur Unterstützung aller relevanten Benutzeroberflächenaktionen bereit, die von der IDE initiiert werden.
Sie können die IVsProjectFactory-Schnittstelle in einer Klasse im Projekt implementieren. In der Regel befindet sich diese in einem eigenen Moduls.
Ein Beispiel für eine Implementierung der IVsProjectFactory-Schnittstelle finden Sie in PrjFac.cpp B. Basic Project im Verzeichnis enthalten ist.
Projekte, die von einem Besitzer aggregiert werden, unterstützen, müssen eine Besitzers Schlüssels in der Projektdatei beibehalten werden. Wenn die CreateProject-Methode die einem Projekt mit einer Besitzers Taste aufgerufen wird, konvertiert das Besitze Projekt, dessen Besitzer einer Taste factory Projekt GUID ruft dann die CreateProject factory Projekt für diese Methode aufrufen, um die tatsächliche Build durchzuführen.
Ein Besitz Projekt erstellen
Ein Besitzer erstellt ein Besitz Projekt in zwei Phasen:
Durch Aufrufen der PreCreateForOwner-Methode. Dies gibt dem Besitzen Projekt eine Möglichkeit, ein aggregiertes Projektobjekt auf Grundlage der Eingaben zu erstellen, die IUnknownsteuert. Das Besitze Projekt führt innere IUnknown und das zusammengesetzte Projekt Besitzers zum Objekt zurück. Dies gibt dem Besitzen Projekt eine Möglichkeit zur inneren IUnknownzu speichern.
Durch Aufrufen der InitializeForOwner-Methode. Das Besitze Projekt führt die gesamte Instanziierung, wenn diese Methode aufgerufen wird, anstatt IVsProjectFactory::CreateProject aufrufen, wie das Argument für Projekte, die nicht im Besitz sind. Die Eingabe VSOWNEDPROJECTOBJECT-Enumeration ist i. d. R. das aggregierte Besitze Projekt. Das Besitze Projekt kann diese Variable verwenden, um zu ermitteln, ob das Projektobjekt bereits erstellt wurde (Cookie entspricht nicht null) oder gleichgestellte Cookie erstellt werden muss (null).
Projekttypen werden durch eine eindeutige Projekt-GUID identifiziert, die auf die CLSID eines cocreatable COM-Objekts ähnelt. In der Regel ein Projekt mit Handles factorys, die Instanzen eines bestimmten Projekttyps erstellen, obwohl es möglich ist, ein Projekt factory behandelt haben mehrere Projekttyp-GUID.
Projekttypen werden mit einer bestimmten Dateinamenerweiterung zugeordnet. Wenn ein Benutzer versucht, eine vorhandene Projektdatei öffnen oder ein neues Projekt erstellen, indem Sie eine Vorlage verwendet, klont die IDE die Erweiterung der Datei, um die entsprechende Projekt-GUID zu bestimmen.
Sobald die IDE bestimmt, ob überhaupt ein neues Projekt erstellen oder ein vorhandenes Projekt eines bestimmten Typs geöffnet werden muss, verwendet die IDE die Informationen in der Systemregistrierung unter [HKEY_LOCAL_MACHINE \ Software \ Microsoft \ VisualStudio \ 8.0 \ Projects] nach denen gesucht werden soll, die einem VSPackage die erforderliche Projekt factory implementiert. Die IDE lädt diese VSPackage. In der SetSite-Methode muss die VSPackages factory Projekt mit der IDE registriert, indem die RegisterProjectType-Methode aufgerufen wird.
Die primäre Methode der IVsProjectFactory-Schnittstelle ist CreateProject , die zwei Szenarien behandeln soll: ein vorhandenes Projekt und zum Erstellen eines neuen Projekts öffnen. Die meisten Projekten speichern ihre Projekt Zustand in einer Projektdatei. In der Regel werden neue Projekte erstellt, indem eine Kopie der Vorlagendatei erstellt, die auf die CreateProject-Methode übergeben wird und die Kopie dann öffnet. Vorhandene Projekte direkt instanziiert werden, indem Sie die Projektdatei öffnet, die CreateProject-Methode übergeben wird. Die CreateProject-Methode kann bei Bedarf zusätzliche Benutzeroberflächenfunktionen für den Benutzer angezeigt werden.
Ein Projekt kann auch keine Dateien verwenden und seinen Zustand Projekt in einem Speichermechanismus Gegensatz zum Dateisystem, z. B. eine Datenbank oder einen Webserver stattdessen auf Speichern. In diesem Fall lautet der Dateiname CreateProject-Parameter, der an die Methode übergeben wird, nicht tatsächlich ein Dateisystempfad STRING-ein eindeutige, sondern identifiziert die URL-zu Projektdaten. Sie müssen keine die Vorlagendateien zu kopieren, die CreateProject übergeben werden, um die richtige Konstruktion sequence Ausführung auszulösen.