Sdílet prostřednictvím


Zveřejnění objektů projektu

Vlastní typy projektů mohou poskytovat objekty automatizace, aby bylo možné povolit přístup k projektu pomocí automatizačních rozhraní. Očekává se, že každý typ projektu poskytne standardní Project automatizační objekt, ze Solutionkterého se přistupuje , který obsahuje kolekci všech projektů otevřených v integrovaném vývojovém prostředí (IDE). Očekává se, že každá položka v projektu bude vystavena objektem ProjectItem , ke Project.ProjectItemskterým přistupuje . Kromě těchtostandardníchm objektů

Můžete vytvořit vlastní objekty automatizace na úrovni kořenového adresáře, ke kterým můžete přistupovat z kořenového objektu DTE pomocí DTE.<customObjectName> nebo DTE.GetObject("<customObjectName>"). Například Visual C++ vytvoří kolekci projektů specifickou pro C++ s názvem VCProjects , ke které máte přístup pomocí DTE.VCProjects nebo DTE.GetObject("VCProjects"). Můžete také vytvořit Project.Objectobjekt , který je jedinečný pro typ projektu, a Project.CodeModel, který lze dotazovat na jeho nejvíce odvozený objekt, a , ProjectItemkterý zveřejňuje ProjectItem.Object a ProjectItem.FileCodeModela .

Jedná se o běžnou konvenci pro projekty, které zpřístupňují vlastní kolekci projektů specifickou pro projekt. Například Visual C++ vytvoří konkrétní kolekci projektů jazyka C++, ke které pak můžete přistupovat pomocí DTE.VCProjects nebo DTE.GetObject("VCProjects"). Můžete také vytvořit Project.Objectobjekt , který je jedinečný pro typ projektu, který Project.CodeModellze dotazovat na jeho nejvýraznější objekt, a ProjectItem, který zveřejňuje ProjectItem.Object, a ProjectItem.FileCodeModel.

Přispívání objektu specifického pro balíček VSPackage pro projekt

  1. Přidejte příslušné klíče do souboru .pkgdef balíčku VSPackage.

    Tady jsou například nastavení .pkgdef pro projekt jazyka C++:

    [$RootKey$\Packages\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\Automation]
    "VCProjects"=""
    [$RootKey$\Packages\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\AutomationEvents]
    "VCProjectEngineEventsObject"=""
    
  2. Implementujte kód v GetAutomationObject metodě, jako v následujícím příkladu.

    STDMETHODIMP CVsPackage::GetAutomationObject(
    /* [in]  */ LPCOLESTR       pszPropName,
    /* [out] */ IDispatch **    ppIDispatch)
    {
    ExpectedPtrRet(pszPropName);
    ExpectedPtrRet(ppIDispatch);
    *ppIDispatch = NULL;
    
        if (m_fZombie)
            return E_UNEXPECTED;
    
        if (_wcsicmp(pszPropName, g_wszAutomationProjects) == 0)
        {
            return GetAutomationProjects(ppIDispatch);
        }
        else if (_wcsicmp(pszPropName, g_wszAutomationProjectsEvents) == 0)
        {
            return CAutomationEvents::GetAutomationEvents(ppIDispatch);
        }
        else if (_wcsicmp(pszPropName, g_wszAutomationProjectItemsEvents) == 0)
        {
            return CAutomationEvents::GetAutomationEvents(ppIDispatch);
        }
        return E_INVALIDARG;
    }
    

    V kódu g_wszAutomationProjects je název kolekce projektů. Metoda GetAutomationProjects vytvoří objekt, který implementuje Projects rozhraní a vrátí IDispatch ukazatel na volající objekt, jak je znázorněno v následujícím příkladu kódu.

    HRESULT CVsPackage::GetAutomationProjects(/* [out] */ IDispatch ** ppIDispatch)
    {
        ExpectedPtrRet(ppIDispatch);
        *ppIDispatch = NULL;
    
        if (!m_srpAutomationProjects)
        {
            HRESULT hr = CACProjects::CreateInstance(&m_srpAutomationProjects);
            IfFailRet(hr);
            ExpectedExprRet(m_srpAutomationProjects != NULL);
        }
        return m_srpAutomationProjects.CopyTo(ppIDispatch);
    }
    

    Zvolte jedinečný název objektu automatizace. Konflikty názvů jsou nepředvídatelné a kolize způsobí, že konfliktní název objektu bude libovolně vyvolán, pokud stejný název používá více typů projektů. Do názvu objektu automatizace byste měli zahrnout název společnosti nebo nějaký jedinečný aspekt jejího názvu produktu.

    Objekt vlastní Projects kolekce je vstupním bodem pro zbývající část modelu automatizace projektu. Objekt projektu je také přístupný z Solution kolekce projektů. Po vytvoření odpovídajících položek kódu a registru, které uživatelům Projects poskytují objekty kolekce, musí implementace poskytnout zbývající standardní objekty pro model projektu. Další informace najdete v tématu Modelování projektů.