Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Editeur de code : exécuter directement du code C sharp

0000001976     -      08/05/2013

Dans l’éditeur de code C#, il est possible d'exécuter directement un assembly,

  • soit par ce que celui-ci est un EXE,
  • soit parce qu'il s'agit d'une DLL qui implémente l'interface MercatorUi.Interfaces.IExec

Le bouton "Exécuter" permet alors d'exécuter directement ce code C#.

Exécution d'un EXE

Pour que l'éditeur de code C# produise un EXE, il faut que les options de compilations suivantes soient présentes :

  • target:winexe
  • main : espace de nom . nom de classe

et que le code implémente une méthode statique Main()

Notez que lorsque l'on tente d'exécuter pour la première fois un code ne présentant pas ces caractéristiques, Mercator propose de les ajouter automatiquement.

Voici un exemple de code C# minimum pour un exécutable :

Zoom
/*<CompilerOptions>
     /target:winexe
     /main:MyNameSpace.Class1
</CompilerOptions>*/

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

namespace MyNameSpace
{
     public class Class1
    {

         public static void Main()
        { 
            System.Windows.Forms.MessageBox.Show( "OK" );
        }

    }
}

L'inconvénient de l'exécution d'un EXE est qu'elle se produit dans un espace mémoire indépendant de Mercator. De la sorte, il n'est pas possible de partager directement des variables globales de Mercator et d'interagir avec des objets de Mercator. Par ailleurs, bon nombre de classes de MercatorUi et de MercatorTunnel n'étant pas correctement initialisées, sont donc tout simplement inutilisable dans ce mode. C'est pourquoi, il est recommandé d'utiliser le second mode (exécution d'une DLL).

Exécution d'une DLL

L'exécution d'une DLL offre le grand avantage de s'exécuter dans le même AppDomain que Mercator, de la sorte toutes les ressources publiques de Mercator (classes, variables globales, ...) sont entièrement disponibles. Pour que Mercator puisse exécuter cette DLL, elle doit simplement implémenter l'interface MercatorUi.Interfaces.IExec.

Notez que lors de l'ouverture d'un nouvel onglet C#, le code nécessaire est déjà présent : il suffit de retirer les symboles des commentaires

  • devant MercatorUi.Interfaces.IExec : //
  • autour du bloc public void Main() : /* et */

Le code minimum s'écrit comme suit :

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

namespace MyNameSpace
{
     public class Class1 : MercatorUi.Interfaces. IExec
    {

         public void Main()
        {
            MercatorUi. Dialogs .Stop( "OK" );
        }

    }
}

Vous noterez qu'à chaque exécution, Mercator produit un assembly dont le nom commence par le nom de fichier utilisé pour la sauvegarde de l'onglet, suivi de la date et de l'heure. Ce mécanisme est nécessaire afin de s'assurer que le framework .net exécute bien la dernière version de votre assembly et non une version compilée au préalable et toujours en mémoire. Mercator ne contient pas de mécanisme supprimant automatiquement ces DLL. Il faut donc de temps à autre les supprimer manuellement.