在访问IVsExpansionClient.FormatSpan(IVsTextLines pBuffer, TextSpan[] ts)中的默认C#-LanguageService时,我遇到了问题。我需要一个当前Source-Instance的LanguageService,以便能够为传入的LanguageService创建一个EditArray。我能够用以下代码接收COM对象:
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?
谢谢!
发布于 2022-10-22 00:46:56
语言服务实现了许多不同的接口,然后您将尝试查询它以获取您想要的任何接口。您提到了C#,在我们的示例中,我们实际上根本没有从包框架LanguageService派生,因此强制转换会失败。
你可能想在你的问题中澄清你想要达到的目标,因为我不太清楚这一点。
https://stackoverflow.com/questions/74011345
复制相似问题