Partager via


Adapter du code hérité au nouvel éditeur

L'éditeur dans Visual Studio 2010 offre de nombreuses fonctionnalités auxquelles vous pouvez accéder aux composants de code existants. L'instruction suivante indique comment adapter non-FORCE EXPÉDITIONNAIRE DES MARINES un composant, par exemple, un VSPackage, pour utiliser les fonctionnalités d'éditeur. L'instruction indique également comment utiliser des adaptateurs pour obtenir les services de l'éditeur en code managé et non managé.

Adaptateurs de l'éditeur

Les adaptateurs d'éditeur, ou les cales, sont des wrappers pour les objets d'éditeur qui expose également des classes et des interfaces dans l'API d' Microsoft.VisualStudio.TextManager.Interop . Vous pouvez utiliser les adaptateurs pour déplacer entre le non-éditeur services par exemple, les commandes de l'environnement Visual Studio, et les services d'éditeur. (C'est ainsi que l'éditeur est actuellement hébergé dans Visual Studio.) Les adaptateurs permettent également aux extensions du service héritées d'éditeur de langage et pour fonctionner correctement dans Visual Studio 2010.

À l'aide de adaptateurs de l'éditeur

IVsEditorAdaptersFactoryService fournit des méthodes qui ont basculé entre les nouvelles interfaces d'éditeur et les interfaces héritées, et également des méthodes qui créent des adaptateurs.

Si vous utilisez ce service à un composant MEF, vous pouvez importer le service comme suit.

[Import(typeof(IVsEditorAdaptersFactoryService))]
internal IVsEditorAdaptersFactoryService editorFactory;

Si vous souhaitez utiliser ce service dans un composant non-FORCE EXPÉDITIONNAIRE DES MARINES, suivez les instructions de « utilisation de services d'éditeur Visual Studio dans » une section Non-FORCE EXPÉDITIONNAIRE DES MARINES composant plus loin dans cette rubrique.

Basculement entre la nouvelle API d'éditeur et l'API héritée

Utilisez les méthodes suivantes pour basculer entre un objet d'éditeur et une interface héritée.

Méthode

Conversion

GetBufferAdapter

Convertit un ITextBuffer en IVsTextBuffer.

GetDataBuffer

Convertit un IVsTextBuffer en ITextBuffer.

GetDocumentBuffer

Convertit un IVsTextBuffer en ITextBuffer.

GetViewAdapter

Convertit un ITextView en IVsTextView.

GetWpfTextView

Convertit un IVsTextView en IWpfTextView.

créer des adaptateurs

Utilisez les méthodes suivantes pour créer des adaptateurs pour les interfaces héritées.

Méthode

Conversion

CreateVsCodeWindowAdapter

Crée un IVsCodeWindow.

CreateVsTextBufferAdapter

crée IVsTextBuffer pour IContentTypespécifié.

CreateVsTextBufferAdapter

Crée un IVsTextBuffer.

CreateVsTextBufferCoordinatorAdapter

Crée un IVsTextBufferCoordinator.

CreateVsTextViewAdapter

Crée un IVsTextView pour un ITextViewRoleSet.

CreateVsTextViewAdapter

Crée un IVsTextView.

Créer des adaptateurs dans du code non managé

Toutes les classes d'adaptateur sont inscrites pour être local Co-creatable, et peuvent être instanciées à l'aide de la fonction d' VsLocalCreateInstance() .

Tous les adaptateurs sont créés à l'aide de le GUID définis dans le fichier de vsshlids.h dans. installation de \VisualStudioIntegration\Common\Inc\ folder of the Visual Studio SDK. Pour créer une instance de VsTextBufferAdapter, utilisez le code suivant.

IVsTextBuffer *pBuf = NULL;
VsLocalCreateInstance(CLSID_VsTextBuffer, NULL, CLSCTX_INPROC_SERVER, IID_IVsTextBuffer, (void**)&pBuf);

Créer des adaptateurs dans le code managé

En code managé, vous pouvez co-créer que les adaptateurs de la même façon que celui décrits pour le code non managé. Vous pouvez également utiliser un service MEF qui vous permet de créer et d'interagir avec les adaptateurs. Cette façon d'obtenir un adaptateur permet un contrôle plus fin que vous avez lorsque vous co-créer -le.

Pour créer un adaptateur IVsTextView pour

  1. ajoutez une référence à Microsoft.VisualStudio.Editor.dll. assurez-vous qu' CopyLocal est défini à false.

  2. instanciez IVsEditorAdaptersFactoryService, comme suit.

    using Microsoft.VisualStudio.Editor;
    ...
    IVsEditorAdaptersFactoryService adapterFactoryService = ComponentModel.GetService<IVsEditorAdaptersFactoryService>();
    
  3. Appelez la méthode CreateX().

    adapterFactoryService.CreateTextViewAdapter(textView);
    

À l'aide de l'éditeur Visual Studio directement du code non managé

L'espace de noms de Microsoft.VisualStudio.Platform.VSEditor et l'espace de noms de Microsoft.VisualStudio.Platform.VSEditor.Interop exposent les interfaces COM-appelables en tant qu'interfaces d'IVx*. Par exemple, l'interface de Microsoft.VisualStudio.Platform.VSEditor.Interop.IVxTextBuffer est la version COM de l'interface d' ITextBuffer . D' IVxTextBuffer, vous pouvez accéder aux instantanés de la mémoire tampon, modifier la mémoire tampon, écouter les événements de texte-modification sur la mémoire tampon, et créer des points et les étendues de suivi. Les étapes suivantes indiquent comment accéder à IVxTextBuffer d' IVsTextBuffer.

Pour obtenir une IVxTextBuffer

  1. les définitions pour les interfaces d'IVx* sont dans le fichier de VSEditor.h dans. installation de \VisualStudioIntegration\Common\Inc\ folder of the Visual Studio SDK.

  2. Le code suivant instancie une mémoire tampon de texte à l'aide de la méthode d' IVsUserData->GetData() . Dans le code suivant, pData est un pointeur vers un objet d' IVsUserData .

    #include <textmgr.h>
    #include <VSEditor.h>
    #include <vsshlids.h>
    
    CComPtr<IVsTextBuffer> pVsTextBuffer;
    CComPtr<IVsUserData> pData;
    CComPtr<IVxTextBuffer> pVxBuffer;
    ...
    if (SUCCEEDED(pVsTextBuffer->QueryInterface(IID_IVsUserData, &pData))
    {
        CComVariant vt;
        if (SUCCEEDED(pData->GetData(GUID_VxTextBuffer, &vt)) &&
        (vt.Type == VT_UNKNOWN) && (vt.punkVal != NULL))
        {
            vt.punkVal->QueryInterface(IID_IVxTextBuffer, (void**)&pVxBuffer);
        }
    }
    

Utilisation de services d'éditeur Visual Studio dans un composant Non-FORCE EXPÉDITIONNAIRE DES MARINES

Si vous avez un composant existant du code managé qui n'utilise pas MEF et que vous souhaitez utiliser les services de l'éditeur Visual Studio, vous devez ajouter une référence à l'assembly qui contient le ComponentModelHost VSPackage et obtenez son service de SComponentModel.

Pour consommer des composants d'éditeur Visual Studio d'un composant non-FORCE EXPÉDITIONNAIRE DES MARINES

  1. ajoutez une référence à l'assembly de Microsoft.VisualStudio.ComponentModelHost.dll dans. installation de \Common7\IDE\ folder of the Visual Studio. assurez-vous qu' CopyLocal est défini à false.

  2. Ajoutez un membre privé d' IComponentModel à la classe dans laquelle vous souhaitez utiliser des services d'éditeur Visual Studio, comme suit.

    using Microsoft.VisualStudio.ComponentModelHost;
    ....
    private IComponentModel componentModel;
    
  3. instanciez le modèle composant dans la méthode d'initialisation pour votre composant.

    componentModel =
     (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
    
  4. Ensuite, vous pouvez obtenir de les services d'éditeur Visual Studio en appelant la méthode d' IComponentModel.GetService<T>() du service que vous souhaitez.

    textBufferFactoryService =
         componentModel.GetService<ITextBufferFactoryService>();