2009-10-12 7 views
0

Je construis quelque chose de similaire à Server Explorer pour Apache CouchDB. Une des choses nécessaires est de pouvoir éditer les définitions de vue CouchDB qui dans CouchDB sont des fonctions JavaScript. Comment puis-je faire en sorte que Visual Studio utilise mon objet pour récupérer et enregistrer le contenu de la fonction JavaScript, mais utilise toujours le reste - Je suis content de l'éditeur lui-même et n'ai pas l'intention d'écrire mon propre éditeur/langage , etc. ce dernier serait beaucoup plus d'efforts que ce que ce projet garantitVisual Studio - Modifier le code source situé dans une base de données

Modifier

Après plus de creuser, je suis toujours bloqué. Voici ce que je sais: IVsUIShellOpenDocument interface fournit une méthode OpenStandardEditor qui peut être utilisé pour ouvrir l'éditeur Visual Studio standard. En tant que l'un des paramètres, cette méthode prend un pointeur vers l'interface IUnknown de l'objet de données de document. Cet objet est supposé implémenter plusieurs interfaces décrites dans de nombreux endroits partout dans le MSDN. Visual Studio SDK fournit également un exemple d'implémentation de l'objet de données de document VsTextBufferClass. Je peux créer une instance de cette classe et quand je passe le pointeur à l'instance au OpenStandardEditor je peux voir mon éditeur et cela semble fonctionner.

Lorsque je tente de mettre en œuvre ma propre classe implémentant les mêmes interfaces (IVsTextBuffer, VsTextBuffer, IVsTextLines) OpenStandardEditor méthode retourne succès, mais VS bombes sur appel sur editor.Show() avec une violation d'accès.

Je soupçonne que VsTextBufferClass implémente également d'autres interfaces mais pas en mode C# mais plutôt dans la bonne vieille façon COM. Je ne sais pas lequel (s).

Des pensées?

Répondre

0

Et si vous aviez un programme qui exporterait le javascript vers des fichiers sur le disque, puis les réimporterait dans la base de données une fois que vous auriez fini de les éditer avec Visual Studio? Ce pourrait être le moyen le plus simple de le faire.

+0

Ceci est certainement une option, je ne l'aime tout simplement pas, car il va créer toutes sortes de problèmes de synchronisation – mfeingold

Questions connexes