方法 : DTE オブジェクトおよび DTE2 オブジェクトへの参照を取得する

更新 : 2007 年 11 月

EnvDTE アセンブリでは、DTE オブジェクトは、Visual Studio 統合開発環境 (IDE: Integrated Development Environment) を表し、オートメーション モデル階層の最上位のオブジェクトになります。すべてのオートメーション アプリケーションでは、主要なオートメーション モデルにアクセスするために、このオブジェクトへの参照が必要になります。これは、Visual Studio 2005 でも引き続き当てはまります。

ただし、EnvDTE80 アセンブリを追加すると、DTE2 という名前の最上位のオブジェクトに置き換えられます。このオブジェクトは、DTE オブジェクトの代わりに使用されます。この 2 つのオブジェクトの動作およびプログラムは同じですが、DTE2 は、新しい機能を含んでおり、新しいオブジェクトとコレクションおよび更新されたオブジェクトとコレクションを数多くホストしています。

したがって、新しいオートメーション アプリケーションおよびアドインを作成する場合、両方のオブジェクトへの参照を作成する必要があります。新しい DTE2 オブジェクトでは、新しい機能にアクセスできますが、DTE オブジェクトは、残っている主要なオートメーション機能にアクセスできます。できる限り、DTE 内のオブジェクトおよびコレクションではなく、DTE2 にある新しいオブジェクトおよびコレクションを使用する必要があります。

次の手順では、DTE2 オブジェクトへの参照を取得する方法を示します。この手順は、DTE オブジェクトにも当てはまります。オブジェクトへの参照を追加する前に、適切なアセンブリおよびタイプ ライブラリへの参照を追加する必要があります。詳細については、「方法 : EnvDTE、EnvDTE80、および EnvDTE90 の各名前空間への参照を追加する」を参照してください。

使用するプログラム ID (ProgID) は VisualStudio.DTE.8.0 です。返されたオブジェクトを DTE2 インターフェイスにキャストできます。

DTE2 のプロパティ、メソッド、およびイベントは、呼び出されたときに、DTE 型を返します。たとえば、Solution は、Solution オブジェクトを返しますが、Solution2 オブジェクトを返しません。このため、DTE2 メンバまたは他の型のメンバを使用する場合は、これらのメンバを明示的に型キャストする必要があります。これは、多くの理由で意図的に行われました。第一の理由として、一貫性を保ち、混乱を減らすことが挙げられます。EnvDTE80 アセンブリは、すべての DTE2 プロパティに対し、一貫して同じインターフェイスを返します。最新のインターフェイスのバージョンを返すことは、混乱状態を招く場合があります。たとえば、Visual Studio の将来のバージョンに DTE3 型がある場合、インターフェイスによっては、DTEDTE2、または DTE3 を返すことがあります。さらに、EnvDTE80 の "2" インターフェイスが EnvDTE インターフェイスから派生していることが原因で、COM 相互運用の問題が発生する場合があります。たとえば、Window2 は、Window から派生しています。DTE プロパティを Window2 に追加した場合、このプロパティは、Windows プロパティを非表示にし、COM アプリケーションで正しく動作しなくなります。

68shb4dw.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

Visual Basic で DTE2 オブジェクトを参照するには

  • コードに次のように追加します。

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

    または

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE2")
    
  • マクロ IDE オブジェクトを参照するには、コードに次のように追加します。

    ' 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
    

Visual C# で DTE2 オブジェクトを参照するには

  • コードに次のように追加します。

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

    または

    // 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");
    
  • マクロ IDE オブジェクトを参照するには、コードに次のように追加します。

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

Visual C++ (ATL) で DTE オブジェクトまたは DTE2 オブジェクトを参照するには

  • コードに次のように入力します。

    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.
    

    または

    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;
    
  • マクロ IDE オブジェクトを参照するには、コードに次のように追加します。

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

参照

処理手順

方法 : EnvDTE、EnvDTE80、および EnvDTE90 の各名前空間への参照を追加する

方法 : アドイン マネージャを使用してアドインを制御する

概念

IDE の特定のインスタンスへのアタッチ

アドインの登録

オートメーション オブジェクト モデルの階層図

その他の技術情報

アドインおよびウィザードの作成