Exposer des objets du projetExpose project objects

Les types de projet personnalisés peuvent fournir des objets automation afin d’autoriser l’accès au projet à l’aide des interfaces d’automatisation.Custom project types can provide automation objects in order to allow access to the project using automation interfaces. Chaque type de projet est censé fournir la norme Project objet automation qui est accessible à partir de Solution, qui contient une collection de tous les projets qui sont ouverts dans l’IDE.Every project type is expected to provide the standard Project automation object that is accessed from Solution, which contains a collection of all projects that are open in the IDE. Chaque élément dans le projet doit être exposé par un ProjectItem objet accédé avec Project.ProjectItems.Each item in the project is expected to be exposed by a ProjectItem object accessed with Project.ProjectItems. Outre ces objets automation standard, les projets peuvent choisir de fournir des objets automation de projet spécifique.In addition to these standard automation objects, projects can choose to offer project-specific automation objects.

Vous pouvez créer des personnalisés au niveau racine objets automation que vous pouvez accéder à liaison tardive à partir de l’objet DTE racine à l’aide DTE.<customObjectName> ou DTE.GetObject("<customObjectName>").You can create custom root-level automation objects that you can access late-bound from the root DTE object using DTE.<customObjectName> or DTE.GetObject("<customObjectName>"). Par exemple, Visual C++ crée une collection de projet spécifique à un projet C++ appelée VCProjects auxquelles vous pouvez accéder à l’aide de DTE.VCProjects ou DTE.GetObject("VCProjects").For example, Visual C++ creates a C++ project-specific project collection called VCProjects that you can access using DTE.VCProjects or DTE.GetObject("VCProjects"). Vous pouvez également créer un Project.Object, qui est unique pour le type de projet, un Project.CodeModel, qui peut être interrogée pour son objet plus dérivé et un ProjectItem, qui expose ProjectItem.Object et un ProjectItem.FileCodeModel.You can also create a Project.Object, which is unique for the project type, a Project.CodeModel, which can be queried for its most-derived object, and a ProjectItem, which exposes ProjectItem.Object and a ProjectItem.FileCodeModel.

Il est couramment utilisée pour les projets exposer une collection de projets personnalisés, spécifiques au projet.It is a common convention for projects to expose a custom, project-specific project collection. Par exemple, Visual C++Visual C++ crée une collection de projets spécifiques de C++ que vous pouvez ensuite accéder à l’aide de DTE.VCProjects ou DTE.GetObject("VCProjects").For example, Visual C++Visual C++ creates a C++ specific project collection that you can then access using DTE.VCProjects or DTE.GetObject("VCProjects"). Vous pouvez également créer un Project.Object, qui est unique pour le type de projet, un Project.CodeModel, qui peut être interrogée pour son objet plus dérivé, un ProjectItem, qui expose ProjectItem.Objectet un ProjectItem.FileCodeModel.You can also create a Project.Object, which is unique for the project type, a Project.CodeModel, which can be queried for its most-derived object, a ProjectItem, which exposes ProjectItem.Object, and a ProjectItem.FileCodeModel.

De contribuer un objet VSPackage spécifique pour un projetTo contribute a VSPackage-specific object for a project

  1. Ajouter les clés appropriées à la .pkgdef fichier de votre VSPackage.Add the appropriate keys to the .pkgdef file of your VSPackage.

    Par exemple, voici le .pkgdef paramètres pour le projet de langage C++ :For example, here are the .pkgdef settings for the C++ language project:

    [$RootKey$\Packages\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\Automation]  
    "VCProjects"=""  
    [$RootKey$\Packages\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\AutomationEvents]  
    "VCProjectEngineEventsObject"=""  
    
  2. Implémenter le code dans le GetAutomationObject méthode, comme dans l’exemple suivant.Implement the code in the GetAutomationObject method, as in the following example.

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

    Dans le code, g_wszAutomationProjects est le nom de votre collection de projets.In the code, g_wszAutomationProjects is the name of your project collection. Le GetAutomationProjects méthode crée un objet qui implémente le Projects interface et retourne un IDispatch pointeur vers l’objet appelant, comme indiqué dans l’exemple de code suivant.The GetAutomationProjects method creates an object that implements the Projects interface and returns an IDispatch pointer to the calling object, as shown in the following code example.

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

    Choisissez un nom unique pour votre objet automation.Choose a unique name for your automation object. Conflits de noms sont imprévisibles, entraînant des collisions d’un nom d’objet en conflit à arbitrairement exclues si plusieurs types de projets utilisent le même nom.Name conflicts are unpredictable, and collisions cause a conflicting object name to be arbitrarily thrown out if multiple project types use the same name. Vous devez inclure le nom de votre société ou de certains aspects uniques de son nom de produit dans le nom de l’objet automation.You should include your corporate name or some unique aspect of its product name in the name of the automation object.

    Personnalisé Projects objet de collection est un point d’entrée plus de commodité pour la partie restante de votre modèle automation de projet.The custom Projects collection object is a convenience entry point for the remaining part of your project automation model. Votre objet de projet est également accessible depuis le Solution collection de projets.Your project object is also accessible from the Solution project collection. Une fois que vous avez créé les entrées appropriées de code et de Registre qui fournissent des consommateurs disposant de Projects objets de collection, votre implémentation doit fournir restant des objets standards pour le modèle de projet.After you have created the appropriate code and registry entries that provide consumers with Projects collection objects, your implementation must provide remaining standard objects for the project model. Pour plus d’informations, consultez modélisation de projet.For more information, see Project modeling.

Voir aussiSee also