我正在为 Apache CouchDB 构建类似于 Server Explorer 的东西。必要的事情之一是能够编辑 CouchDB 视图定义,这些定义在 CouchDB 中是 JavaScript 函数。
如何欺骗 Visual Studio 使用我的对象来检索和保存 JavaScript 函数的内容,但仍然使用它的其余部分 - 我对编辑器本身很满意,并且无意编写自己的编辑器/语言服务等。后者将比该项目所保证的更大的努力
编辑
经过更多的挖掘,我仍然被卡住了。这是我所知道的:IVsUIShellOpenDocument
interface 提供了一种OpenStandardEditor
可用于打开标准 Visual Studio 编辑器的方法。作为参数之一,此方法采用指向文档数据对象的 IUnknown 接口的指针。该对象应该实现 MSDN 上许多地方描述的多个接口。
Visual Studio SDK 还提供了文档数据对象的“示例”实现VsTextBufferClass
。我可以创建这个类的一个实例,当我将指向实例的指针传递给OpenStandardEditor
我可以看到我的编辑器时,它似乎工作正常。
当我尝试实现我自己的实现相同接口的类时(IVsTextBuffer
, VsTextBuffer
, IVsTextLines
)OpenStandardEditor
方法返回成功,但是 VS 在调用editor.Show()
时因访问冲突而崩溃。
我怀疑 VsTextBufferClass 还实现了一些其他接口,但不是以 C# 方式,而是以良好的旧 COM 方式。我只是不知道是哪一个。
有什么想法吗?