Freigeben über


Ereignisse in Visual Studio SDK verfügbar machen

Visual Studio können Sie Ereignisse, indem die Automatisierung veranschaulicht. Es wird empfohlen, dass Sie Ereignisse für Projekte und Projektelemente.

Ereignisse werden vom Automatisierungsmodell für die vom Events-Objekt oder GetObject abgerufen EventObjectName („“) eingeschlossen werden. Die Umgebung wird IDispatch::Invoke an, indem Sie die DISPATCH_METHOD oder DISPATCH_PROPERTYGET-Flags verwendet, um ein Ereignis zurückzugeben.

Im folgenden Verfahren wird erläutert, wie VSPackage-Besondere Ereignisse zurückgegeben werden.

  1. Die Umgebung wird gestartet.

  2. Lesen Sie alle Namen des Werts aus der Registrierung unter den Automatisierungs-, AutomationEvents- und AutomationProperties-Tasten aller VSPackages und speichert diese Namen in einer Tabelle.

  3. Ein für die Automatisierung, wird in diesem Beispiel DTE.Events.AutomationProjectsEvents oder DTE.Events.AutomationProjectItemsEventsan.

  4. Die Umgebung durchsucht den Zeichenfolgenparameter in der Tabelle und lädt entsprechende VSPackage.

  5. Die Umgebung wird die GetAutomationObject-Methode aufrufen, indem Sie den Namen, der im Aufruf übergeben wird. In diesem Beispiel AutomationProjectsEvents oder AutomationProjectItemsEvents.

  6. VSPackage wird ein Stammobjekt, das Methoden wie get_AutomationProjectsEvents und get_AutomationProjectItemEvents verfügt und gibt dann einen IDispatch-Zeiger des Objekts zurück.

  7. Die Umgebung wird die entsprechende Methode nach Namen an, der im Automatisierungsmodell Aufruf übergeben wird.

  8. Die get_-Methode erstellt ein anderes IDispatch-basiertes Ereignisobjekt, das die IConnectionPointContainer-Schnittstelle und die IConnectionPoint-Schnittstelle implementiert und einen Zeiger auf denIDispatch Objekt zurückgibt.

Um ein Ereignis indem Sie verfügbar machen verwenden, müssen Sie auf GetAutomationObject und Überwachungen für die Zeichenfolgen reagieren, die Sie der Registrierung hinzufügen. Im Beispiel für einen grundlegenden Projekt handelt es sich um die Zeichenfolgen „BscProjectsEvents“ und „BscProjectItemsEvents“.

Registrierungseinträge vom grundlegenden Projekt-Beispiel

In diesem Abschnitt erfahren Sie, wo Automatisierungsereignis Attributwerte der Registrierung hinzufügt.

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 8.0 \ Packages \ <PkgGUID> \ AutomationEvents]

„AutomationProjectEvents " = " gibt das AutomationProjectEvents-Objekt“ zurück

„AutomationProjectItemEvents " = " gibt das AutomationProjectItemsEvents-Objekt“ zurück

Name

Typ

Bereich

Beschreibung

Standard (@)

REG_SZ

Nicht verwendet

Nicht verwendet. Sie können das Datenfeld für Dokumentation verwenden.

AutomationProjectsEvents

REG_SZ

Name des Ereignisobjekts.

Nur der Schlüsselname ist relevant. Sie können das Datenfeld für Dokumentation verwenden.

Dieses Beispiel stammt aus dem Beispiel für einen grundlegenden Projekt.

AutomationProjectItemEvents

REG_SZ

Name des Ereignisobjekts

Nur der Schlüsselname ist relevant. Sie können das Datenfeld für Dokumentation verwenden.

Dieses Beispiel stammt aus dem Beispiel für einen grundlegenden Projekt.

Wenn keines der Ereignisobjekte vom Automatisierungsmodell für eine Anforderung erstellen Sie ein Stammobjekt, das Methoden für jedes Ereignis, das ein VSPackage unterstützt. Die Umgebung wird die entsprechende get_-Methode für dieses Objekt aufgerufen. Wenn z. B. DTE.Events.AutomationProjectsEvents aufgerufen wird, wird die get_AutomationProjectsEvents-Methode für das Stammobjekt aufgerufen.

Automatisierungsmodell für Ereignisse

Ereignisse in Visual Studio-Projekt

Die Klasse CProjectEventsContainer stellt das Quellobjekt für BscProjectsEvents dar, während CProjectItemsEventsContainer das Quellobjekt für BscProjectItemsEvents darstellt.

In den meisten Fällen müssen Sie ein neues Objekt für jede Anforderung Ereignis zurückgegeben werden, da die meisten Ereignisobjekte ein Filterobjekt akzeptieren. Wenn Sie das Ereignis auslösen, überprüfen Sie den Filter, um sicherzustellen, dass der Ereignishandler aufgerufen wird.

AutomationEvents.h und AutomationEvents.cpp Deklarationen enthalten und Implementierungen der Klassen in der folgenden Tabelle.

Klasse

Beschreibung

CAutomationEvents

Implementiert ein Ereignis aus dem Stammverzeichnis abgerufen, DTE.Events-Objekt.

CProjectsEventsContainer und CProjectItemsEventsContainer

Implementieren Sie die Ereignisquellen Objekte, die die entsprechenden Ereignisse auslösen.

Im folgenden Codebeispiel wird veranschaulicht, wie auf eine Anforderung für ein Ereignisobjekt reagiert.

STDMETHODIMP CVsPackage::GetAutomationObject(
    /* [in]  */ LPCOLESTR       pszPropName, 
    /* [out] */ IDispatch **    ppIDispatch)
{
    ExpectedPtrRet(ppIDispatch);
    *ppIDispatch = NULL;

    if (_wcsicmp(pszPropName, g_wszAutomationProjects) == 0) 
        //Is the requested name our Projects object?
    {
        return GetAutomationProjects(ppIDispatch);
        // Gets our Projects object.
    }
    else if (_wcsicmp(pszPropName, g_wszAutomationProjectsEvents) == 0)
        //Is the requested name our ProjectsEvents object?
    {
        return CAutomationEvents::GetAutomationEvents(ppIDispatch);
          // Gets our ProjectEvents object.
    }
    else if (_wcsicmp(pszPropName, g_wszAutomationProjectItemsEvents) == 0)  //Is the requested name our ProjectsItemsEvents object?
    {
        return CAutomationEvents::GetAutomationEvents(ppIDispatch);
          // Gets our ProjectItemsEvents object.
    }
    return E_INVALIDARG;
}

Im Code oben wird g_wszAutomationProjects den Namen der Projektauflistung FigProjects („“) g_wszAutomationProjectsEvents („FigProjectsEvents“) und g_wszAutomationProjectItemsEvents FigProjectItemEvents („“) sind die Namen der Ereignisse Projekt und von Ereignissen Projektelement, die von der VSPackage-Implementierung Ursprungs sind.

Ereignisobjekte werden vom gleichen zentralen Speicherort, der DTE.Events-Objekt abgerufen. Auf diese Weise stellt alle Ereignisobjekte werden zusammen gruppiert, dass ein Endbenutzer das gesamte Objektmodell nicht durchsuchen muss, um ein bestimmtes Ereignis zu suchen. Auf diese Weise können Sie außerdem die spezifischen VSPackage-Objekte bereitstellen, müssen Sie anstelle des eigenen Code für systemweite Ereignisse zu implementieren. Für den Endbenutzer, der ein Ereignis für die ProjectItem-Schnittstelle finden muss, ist es nicht sofort ersichtlich, von wo das Ereignisobjekt abgerufen wird.

Siehe auch

Referenz

GetAutomationObject

Konzepte

Visual Studio-Erweiterbarkeits-Beispiele