Partager via


Comment : obtenir des références aux objets DTE et DTE2

Mise à jour : novembre 2007

Dans l'assembly EnvDTE, l'objet DTE représente l'environnement de développement intégré (IDE) de Visual Studio et constitue l'objet de niveau le plus élevé dans la hiérarchie du modèle Automation. Toutes les applications d'automation doivent référencer cet objet pour accéder au modèle Automation principal. Cette condition reste valable dans Visual Studio 2005.

Cependant, l'ajout de l'assembly EnvDTE80 fournit un objet de niveau supérieur de substitution nommé DTE2. Il remplace l'objet DTE. Si les deux objets agissent et se programment de la même façon, DTE2 contient cependant de nouvelles fonctionnalités et héberge un certain nombre d'objets et de collections nouveaux et mis à jour.

En conséquence, lorsque vous créez de nouveaux compléments et de nouvelles applications d'automation, vous devez référencer ces deux objets. Le nouvel objet DTE2 donne accès aux nouvelles fonctionnalités, tandis que l'objet DTE donne accès au reste des fonctionnalités d'automation principales. Autant que faire se peut, les nouveaux objets et les nouvelles collections sous DTE2 doivent être utilisés en lieu et place des objets et collections sous DTE.

Les procédures suivantes indiquent comment référencer l'objet DTE2. (La même procédure s'applique à l'objet DTE.) Avant d'ajouter des références aux objets, vous devez ajouter des références aux assemblys et à la bibliothèque de types appropriés. Pour plus d'informations, consultez Comment : ajouter des références aux espaces de noms EnvDTE, EnvDTE80 et EnvDTE90.

L'identificateur programmatique (ProgID) à utiliser est VisualStudio.DTE.8.0. Vous pouvez ensuite effectuer un cast de l'objet retourné en interface DTE2.

Lorsqu'ils sont appelés, les propriétés, méthodes et événements DTE2 retournent des types DTE. Par exemple, contrairement à ce que vous pourriez attendre, Solution retourne un objet Solution, et non un objet Solution2. C'est pourquoi, lorsque vous utilisez les membres DTE2 ou d'autres membres de types, vous devez leur appliquer explicitement une conversion de type. Ce procédé est rendu nécessaire intentionnellement pour plusieurs raisons. La première raison consiste à encourager l'homogénéité et à réduire la confusion. L'assembly EnvDTE80 retourne la même interface de manière homogène pour toutes les propriétés DTE2. Retourner la version d'interface la plus récente provoquerait une confusion. Par exemple, si une version ultérieure de Visual Studio présentait un type DTE3, certaines interfaces retourneraient DTE, d'autres DTE2 et d'autres encore DTE3. En outre, ce mode de fonctionnement poserait des problèmes liés à COM Interop car les « 2 » interfaces de EnvDTE80 dérivent des interfaces EnvDTE. Par exemple, Window2 dérive de Window. Si une propriété DTE était ajoutée à Window2, elle masquerait la propriété Windows et ne fonctionnerait pas correctement avec les applications COM.

Remarque :

Selon vos paramètres actifs ou votre édition, les boîtes de dialogue et les commandes de menu que vous voyez peuvent différer de celles qui sont décrites dans l'aide. Ces procédures ont été développées avec les paramètres de développement généraux actifs. Pour modifier vos paramètres, sélectionnez Importer et ExporterParamètres dans le menu Outils. Pour plus d'informations, consultez Paramètres Visual Studio.

Pour référencer l'objet DTE2 en Visual Basic

  • Dans votre code, ajoutez les informations suivantes :

    ' Create a new instance of Visual Studio.
    Dim DTE2 As Object
    DTE2 = Microsoft.VisualBasic.Interaction.CreateObject _
    ("VisualStudio.DTE.8.0")
    

    - ou -

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE2")
    
  • Pour référencer l'objet Éditeur de macros, dans votre code, ajoutez les éléments suivants :

    ' Get an instance of the currently running Macros IDE.
    Dim DTE2 as EnvDTE80.DTE2
    Dim MacrosDTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal.GetActiveObject_
    ("VisualStudio.DTE2")
    MacrosDTE2 = DTE2.MacrosIDE
    

Pour référencer l'objet DTE2 en Visual C#

  • Dans votre code, ajoutez les informations suivantes :

    // Create a new instance of Visual Studio.
    EnvDTE80.DTE2 myDTE2;
    myDTE2 = (EnvDTE80.DTE2)Microsoft.VisualBasic.Interaction.
    CreateObject("VisualStudio.DTE.8.0", "");
    

    - ou -

    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.8.0");
    
  • Pour référencer l'objet Éditeur de macros, dans votre code, ajoutez les éléments suivants :

    // Get an instance of the currently running Macros IDE.
    EnvDTE80.DTE2 dte2;
    EnvDTE80.DTE2 MacrosDTE2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.8.0");
    MacrosDTE2 = dte2.MacrosIDE;
    

Pour référencer l'objet DTE ou DTE2 en Visual C++ (ATL)

  • Dans votre code, entrez les informations suivantes :

    CComPtr<EnvDTE::_DTE> m_pDTE;
    CComPtr<EnvDTE80::_DTE2> m_pDTE2;
    // The 7.1 reference works only if you have Visual Studio .NET 2003 // installed.
    HRESULT hr = m_pDTE.CoCreateInstance("VisualStudio.DTE.7.1", 0, 
    CLSCTX_ALL); // Create a new instance of Visual Studio 
    HRESULT hr2 = m_pDTE2.CoCreateInstance("VisualStudio.DTE.8.0", 0, 
    CLSCTX_ALL); // Create a new instance of Visual Studio.
    

    - ou -

    CComPtr<EnvDTE::_DTE> m_pDTE;
    CComPtr<EnvDTE80::_DTE2> m_pDTE2;
    CLSID clsid;
    CLSID clsid2;
    // The 7.1 reference works only if you have Visual Studio .NET 2003 // installed.
    CLSIDFromProgID(L"VisualStudio.DTE.7.1",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.8.0",&clsid2);
    CComPtr<IUnknown> punk;
    CComPtr<IUnknown> punk2;
    // Get a running instance of Visual Studio.
    // The clsid reference works only if you have Visual Studio .NET 
    // 2003 installed.
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    HRESULT hr = GetActiveObject(clsid2,NULL,&punk2);
    m_pDTE = punk;
    m_pDTE2 = punk2;
    
  • Pour référencer l'objet Éditeur de macros, dans votre code, ajoutez les éléments suivants :

    // Get an instance of the currently runnig Macros IDE.
    CComPtr<EnvDTE80::_DTE2> m_pDTE2;
    CComPtr<EnvDTE80::_DTE2> m_pMacrosIDE;
    CLSID clsid;
    CLSIDFromProgID(L"VisualStudio.DTE.8.0",&clsid);
    CComPtr<IUnknown> punk;
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    m_pDTE = punk;
    m_pDTE->get_MacrosIDE((void **)&m_pMacrosIDE);
    

Voir aussi

Tâches

Comment : ajouter des références aux espaces de noms EnvDTE, EnvDTE80 et EnvDTE90

Comment : contrôler des compléments avec le Gestionnaire de compléments

Concepts

Attachement à des instances spécifiques de l'environnement IDE

Inscription d'un complément

Graphique Modèle d'objet Automation

Autres ressources

Création de compléments et d'Assistants