Condividi tramite


Esporre eventi in Visual Studio SDK

Visual Studio consente di generare gli eventi utilizzando l'automazione. Si consiglia di un eventi per i progetti e gli elementi di progetto.

Gli eventi vengono recuperati dagli utenti di automazione dall'oggetto di Events o da GetObject (“EventObjectName„). L'ambiente chiama IDispatch::Invoke utilizzando i flag di DISPATCH_PROPERTYGET o di DISPATCH_METHOD per restituire un evento.

La procedura seguente viene descritto come gli eventi VSPackage-specifici vengono restituiti.

  1. L'avvio dell'ambiente.

  2. Legge dal Registro di sistema tutti i nomi del valore nelle chiavi di automazione, di AutomationEvents e di AutomationProperties di qualsiasi Vspackage e archivia i nomi in una tabella.

  3. Un'automazione consumer chiama, in questo esempio, DTE.Events.AutomationProjectsEvents o DTE.Events.AutomationProjectItemsEvents.

  4. L'ambiente viene trovato il parametro di stringa nella tabella e carica il package VS corrispondente.

  5. L'ambiente chiama il metodo di GetAutomationObject utilizzando il nome passato nella chiamata, in questo esempio, AutomationProjectsEvents o AutomationProjectItemsEvents.

  6. Il package VS crea un oggetto radice che ha metodi come get_AutomationProjectsEvents e get_AutomationProjectItemEvents quindi restituisce un puntatore IDispatch all'oggetto.

  7. L'ambiente viene chiamato il metodo appropriato in base al nome è passato nella chiamata di automazione.

  8. Il metodo di get_ crea altro a un oggetto evento basato su IDispatch che implementa sia l'interfaccia di IConnectionPointContainer e l'interfaccia di IConnectionPoint e restituisce un puntatore diIDispatch all'oggetto.

Per esporre un evento utilizzando l'automazione, è necessario rispondere a GetAutomationObject e di controllare le stringhe che si aggiunge al Registro di sistema. Nell'esempio di base di progetto, le stringhe sono “BscProjectsEvents„ e “BscProjectItemsEvents„.

Voci del Registro di sistema nell'esempio di base di progetto

In questa sezione viene illustrato dove aggiungere i valori degli eventi di automazione nel Registro di sistema.

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

“AutomationProjectEvents " = " restituisce l'oggetto di AutomationProjectEvents„

“AutomationProjectItemEvents " = " restituisce l'oggetto di AutomationProjectItemsEvents„

Nome

Type

Intervallo

Descrizione

Il valore predefinito (@)

REG_SZ

Non utilizzato

Non utilizzato. È possibile utilizzare il campo dati per la documentazione.

AutomationProjectsEvents

REG_SZ

Nome dell'oggetto evento.

Solo il nome della chiave è rilevante. È possibile utilizzare il campo dati per la documentazione.

Questo esempio non nell'esempio di base di progetto.

AutomationProjectItemEvents

REG_SZ

Nome dell'oggetto evento

Solo il nome della chiave è rilevante. È possibile utilizzare il campo dati per la documentazione.

Questo esempio non nell'esempio di base di progetto.

Quando uno degli oggetti evento sono richiesti da un utente di automazione, creare un oggetto radice che ha metodi per qualsiasi evento supportato da package VS. L'ambiente viene chiamato il metodo appropriato di get_ su questo oggetto. Ad esempio, se DTE.Events.AutomationProjectsEvents viene chiamato, il metodo di get_AutomationProjectsEvents sull'oggetto radice viene richiamato.

modello di automazione per gli eventi

Eventi di progetto Visual Studio

la classe CProjectEventsContainer rappresenta l'oggetto di origine per BscProjectsEvents, mentre CProjectItemsEventsContainer rappresenta l'oggetto di origine per BscProjectItemsEvents.

Nella maggior parte dei casi, è necessario restituire un nuovo oggetto per ogni richiesta di evento perché la maggior parte degli oggetti eventi accettano un oggetto di filtro. Quando si genera l'evento, controllare questo filtro per verificare che il gestore eventi sta chiamando.

AutomationEvents.h e AutomationEvents.cpp contengono le dichiarazioni e le implementazioni di classi nella tabella seguente.

Classe

Descrizione

CAutomationEvents

Implementa un oggetto radice dell'evento, recuperato dall'oggetto di DTE.Events .

CProjectsEventsContainer e CProjectItemsEventsContainer.

Implementare origine evento l'oggetto che genera gli eventi corrispondenti.

Nell'esempio di codice seguente viene illustrato come rispondere a una richiesta per un oggetto evento.

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;
}

Nel codice riportato sopra, g_wszAutomationProjects è il nome della raccolta di progetti (“FigProjects„), g_wszAutomationProjectsEvents (“FigProjectsEvents„) e g_wszAutomationProjectItemsEvents (“FigProjectItemEvents„) sono i nomi degli eventi di progetto e degli eventi degli elementi di progetto che sono originati dall'implementazione di un VSPackage.

Gli oggetti evento recuperati dalla stessa posizione centrale, l'oggetto di DTE.Events . Questa modalità, tutti gli oggetti evento è raggruppati insieme in modo da non dover ricorrere a un utente finale l'intero modello a oggetti per trovare un evento specifico. Ciò consente di fornire oggetti specifici di un VSPackage, anziché richiedere di implementare il proprio codice per gli eventi a livello di sistema. Tuttavia, per l'utente finale, che deve trovare un evento per l'interfaccia di ProjectItem , non è immediatamente chiaro in cui tale oggetto evento viene recuperato.

Vedere anche

Riferimenti

GetAutomationObject

Concetti

Esempi di estensibilità di Visual Studio