首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问VSIX中内置的语言服务?

如何访问VSIX中内置的语言服务?
EN

Stack Overflow用户
提问于 2022-10-10 07:16:12
回答 1查看 69关注 0票数 0

在访问IVsExpansionClient.FormatSpan(IVsTextLines pBuffer, TextSpan[] ts)中的默认C#-LanguageService时,我遇到了问题。我需要一个当前Source-Instance的LanguageService,以便能够为传入的LanguageService创建一个EditArray。我能够用以下代码接收COM对象:

代码语言:javascript
复制
pBuffer.GetLanguageServiceID(out var languageServiceId);
var provider = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider;
var vssp = provider.GetService(typeof(IOleServiceProvider)) as IOleServiceProvider;

var iunknown = new Guid(VSConstants.IID_IUnknown.ToString());
IntPtr ptr;
if (ErrorHandler.Succeeded(vssp.QueryService(ref languageServiceId, ref iunknown, out ptr)))
{
    try
    {
        service = Marshal.GetObjectForIUnknown(ptr);
        lang = (LanguageService)service;
    }
    finally
    {
        Marshal.Release(ptr);
    }
}

但是演员的lang = (LanguageService)service;失败了。我不知道service背后的COM对象是什么类型。因此,我的问题是,如何获得开放编辑器的当前LanguageService?

我已经从这里获取了部分代码:https://github.com/microsoft/VSSDK-Extensibility-Samples/blob/346f5b0289e5fb8de639ba96fb10703df06cd22d/WPFDesigner_XML/WPFDesigner_XML/ViewModel.cs#L275

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-10-22 00:46:56

语言服务实现了许多不同的接口,然后您将尝试查询它以获取您想要的任何接口。您提到了C#,在我们的示例中,我们实际上根本没有从包框架LanguageService派生,因此强制转换会失败。

你可能想在你的问题中澄清你想要达到的目标,因为我不太清楚这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74011345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档