Apache CouchDB のサーバー エクスプローラーに似たものを構築しています。必要なことの 1 つは、CouchDB では JavaScript 関数である CouchDB ビュー定義を編集できることです。
Visual Studio をトリックして、オブジェクトを使用して JavaScript 関数のコンテンツを取得および保存し、残りの部分は引き続き使用できるようにするにはどうすればよいでしょうか。エディター自体には満足しており、独自のエディター/言語サービスなどを作成するつもりはありません。後者は、このプロジェクトが保証するものよりもはるかに大きな努力になるでしょう
編集
さらに掘り下げた後、私はまだ立ち往生しています。私が知っていることは次のとおりです。IVsUIShellOpenDocument
インターフェースはOpenStandardEditor
、標準のVisual Studioエディターを開くために使用できるメソッドを提供します。パラメータの 1 つとして、このメソッドは、ドキュメント データ オブジェクトの IUnknown インターフェイスへの Pointer を取ります。このオブジェクトは、MSDN 全体の多くの場所で説明されているいくつかのインターフェイスを実装することになっています。
Visual Studio SDK は、ドキュメント データ オブジェクトの「サンプル」実装も提供しますVsTextBufferClass
。このクラスのインスタンスを作成できます。インスタンスへのポインタを に渡すとOpenStandardEditor
、エディタが表示され、正常に動作しているように見えます。
IVsTextBuffer
同じインターフェイス ( 、VsTextBuffer
、IVsTextLines
)メソッドを実装する独自のクラスを実装しようとすると、OpenStandardEditor
成功が返されますが、VS は呼び出し時editor.Show()
にアクセス違反で爆発します。
私の疑いでは、VsTextBufferClass は他のインターフェイスも実装していますが、C# の方法ではなく、古き良き COM の方法で実装しています。私はどれがどれかわかりません。
何かご意見は?