Partager via


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

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.

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 Automation.

L'identificateur programmatique (ProgID) à utiliser est VisualStudio.DTE.10.0. Vous pouvez ensuite effectuer le transtypage de l'objet retourné dans une 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.dll 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.

Notes

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. 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 Exporter Paramètres dans le menu Outils. Pour plus d'informations, consultez Utilisation des paramètres.

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

  • Dans votre code, ajoutez les informations suivantes :

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE.10.0")
    
    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.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.
    Dim DTE2 as EnvDTE80.DTE2
    Dim MacrosDTE2 as EnvDTE._DTE
    DTE2 = System.Runtime.InteropServices.Marshal.GetActiveObject_
    ("VisualStudio.DTE2")
    MacrosDTE2 = DTE2.MacrosIDE
    
    // Get an instance of the currently running Macros IDE.
    EnvDTE80.DTE2 dte2;
    EnvDTE.DTE MacrosDTE;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");
    MacrosDTE = 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;
    CLSID clsid;
    CLSID clsid2;
    CLSIDFromProgID(L"VisualStudio.DTE.10.0",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.10.0",&clsid2);
    
    CComPtr<IUnknown> punk;
    CComPtr<IUnknown> punk2;
    // Get a running instance of Visual Studio.
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    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 running Macros IDE.
    CComPtr<EnvDTE80::DTE2> m_pDTE2;
    CComPtr<EnvDTE::_DTE> m_pMacrosIDE;
    CLSID clsid;
    CLSIDFromProgID(L"VisualStudio.DTE.10.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 Automation

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