Appel d'une macro VB dans un code en CSharp

Magnot Messages postés 7 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 17 mars 2006 - 19 févr. 2006 à 04:17
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 20 févr. 2006 à 22:03
Salut,

Je ne sais pas s'il est possible, lors de l'execution d'un programme, de faire un appel "dynamique" à une macro.
Mon programme est écrit en CSharp et ma macro ... en VB ....

Je souhaite juste, à un moment donné de l'execution de mon programme, faire appel à une macro.
J'ai pensé à mettre en référence la macro mais je ne pense pas que cela se fasse, en tout cas je n'ai pas réussi à trouver comment.

Si quelqu'un avait une idée ou avait déjà essayé de faire quelque chose dans le genre ca pourrait vraiment m'aider.

Merci,

@++

10 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 févr. 2006 à 12:21
Salut,

Comment ça une macro ?
Tu es dans quel contexte ? VSTO ?

/*
coq
MVP Visual C#
*/
0
Magnot Messages postés 7 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 17 mars 2006
19 févr. 2006 à 12:35
Oui, pardon, petit oublie ...

Je travail sous VisualStudio.net 2003 framework 1.1
Il permet de réaliser des macros en VB s'interfaçant avec l'environnement VisualStudio.
Ma macro me sert à récuperer le chemin de la solution courante ouverte dans VisualStudio et a la compiler.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 févr. 2006 à 12:56
Et ton code C# qui doit lancer l'execution se trouve dans quel type de code, un composant ?

/*
coq
MVP Visual C#
*/
0
Magnot Messages postés 7 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 17 mars 2006
19 févr. 2006 à 13:15
Oui, c'est un composant
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 févr. 2006 à 14:24
Je ne sais pas si un service permet ce genre de chose (voir propriété Site et IServiceProvider.GetService), mais tu devrais y arriver en manipulant le modèle objet de Visual Studio.
De la même manière que tu le fais dans la macro d'ailleurs, tu pourras donc probablement la remplacer par l'execution des actions directement dans le code lui même.

Pour y accèder tu dois ajouter la référence à envdte.

L'initialisation se fait comme ceci :
private EnvDTE.DTE _dte;
...
this._dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.7.1");

Utilisation :
MessageBox.Show(string.Format("Solution : {0}", this._dte.Solution.FileName));

/*
coq
MVP Visual C#
*/
0
Magnot Messages postés 7 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 17 mars 2006
19 févr. 2006 à 15:38
En fait, cette action la me renvoi le repertoire du programme executant, ce n'est pas exactement ce que je veux.

Je vais un peux plus decrire ce que je cherche à faire :
En plus des macros, VisualStudio propose de pouvoir créer des "ADDINS". (c'est mon programme en CSharp)
J'ai créé mon propre addin qui s'integre dans l'environnement VisualStudio, donc je peux l'appeler à n'importe quel moment, quelle que soit la solution ouverte dans VisualStudio.

L'intérêt de cet addin est de pouvoir recuperer le repertoire de la solution actuellement ouverte dans VisualStudio (pas le repertoire de l'addin mais de la solution) afin de compiler cette solution, recuperer la dll générée et l'envoyer via le .netremoting vers le repository.

J'aurais du preciser tout cela au début, désolé....

Et je n'ai pas réussi à faire autrement que d'utiliser une macro pour réaliser cette action. Cela me parait bizarre mais bon ...
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 févr. 2006 à 16:13
Ah oui, ça c'est une précision importante lol
Sinon tu as dû te tromper quelquepart dans ton code, car le code suivant (en ouvrant VS via le fichier sln) affiche le path du sln, lance la compilation et lance la sortie sans debug :

public void OnStartupComplete(ref System.Array custom)
{
if ( this.applicationObject.Solution.IsOpen )
{
try
{
// affichage du path du fichier sln
System.Windows.Forms.MessageBox.Show(
string.Format("Compilation de "{0}"", this.applicationObject.Solution.FullName)
);

// compilation
this.applicationObject.Solution.SolutionBuild.Build(true);
System.Windows.Forms.MessageBox.Show("Compilation terminée");


// lancement
this.applicationObject.Solution.SolutionBuild.Run();
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
}
else
System.Windows.Forms.MessageBox.Show("Veuillez ouvrir une solution...");
}

/*
coq
MVP Visual C#
*/
0
Magnot Messages postés 7 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 17 mars 2006
19 févr. 2006 à 18:14
@(^_^)@ je t'adore !!!!! lol

Un grand merci ;o)
Je m'attendais à un quelque chose de plus compliqué ... cela me vexe un peu .. lol

Encore une fois merci !

A bientôt (enfin j'espere que je ne vais pas avoir de probleme tous les jours sinon mon programme ne risque pas d'avancer !!)
0
cs_azra Messages postés 425 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 13 juillet 2007 1
20 févr. 2006 à 21:05
Bonjour Magnot,

Pense a selectionner "Réponse acceptée" lorsque la réponse te convient.

Bon courage!

Ps: Coucou Coq :P


<HR>
Azra (Florent) - MVS - MCAD.NET
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 févr. 2006 à 22:03
Hello :-)

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous