我正在为ApacheCouchDB构建类似于服务器浏览器的东西。需要做的事情之一是能够编辑CouchDB视图定义,CouchDB中的视图定义是JavaScript函数。
我怎样才能骗过Visual Studio使用我的对象来检索和保存JavaScript函数的内容,但仍然使用它的其余部分呢?我对编辑器本身很满意,不打算编写自己的编辑器/语言服务等。后者的工作量将比这个项目所保证的要大得多
编辑
经过更多的挖掘,我仍然被困住了。以下是我所知道的:
IVsUIShellOpenDocument
接口提供了一种方法
OpenStandardEditor
可用于打开标准Visual Studio编辑器。作为参数之一,该方法使用指向文档数据对象的IUnknown接口的指针。这个对象应该实现MSDN中许多地方描述的几个接口。
VisualStudioSDK还提供了文档数据对象的“示例”实现
VsTextBufferClass
.我可以创建这个类的一个实例,当我将指向该实例的指针传递给
OpenStandardEditor
我可以看到我的编辑,它似乎工作正常。
当我尝试实现我自己的类时,实现了相同的接口(
IVsTextBuffer
,
VsTextBuffer
,
IVsTextLines
)
OpenStandardEditor
方法返回成功,但VS在调用时爆炸
editor.Show()
违反访问权限。
我怀疑VsTextBufferClass也实现了一些其他接口,但不是以C#的方式,而是以良好的旧COM方式。我只是不知道是哪一个。
有什么想法吗?