Utiliser Automation depuis Scilab sur Windows

Automation (anciennement OLE Automation) permet la communication entre différents logiciels (processus) sur Windows. Cela permet par exemple de faire communiquer MATLAB avec Excel (voir Contrôle d’Excel par MATLAB via Automation).

Avec MATLAB, il suffit d’utiliser la fonction actxserver. Il n’y a pas de fonction équivalente fournie avec la version de base de Scilab. Il faut installer un module complémentaire « ole » qui se trouve sur la forge Scilab (What is the Forge ?).

Téléchargement du module « ole »

Le code source du module « ole » est disponible à cette adresse : http://forge.scilab.org/index.php/p/ole/

Les fichiers sources sont disponibles soit en format zip : ole-master.zip, soit via un dépôt Git avec la commande git clone git://git.forge.scilab.org/ole.git

Une fois le code source téléchargé, il faut maintenant le compiler.

Compilation du module « ole »

Vous devez tout d’abord vérifier qu’un compilateur Microsoft de la suite Visual Studio est installé. Ouvrez Scilab et exécutez la commande suivante :

-->compiler = findmsvccompiler()

Si aucun nom de compilateur n’est renvoyé, vous devez en installer un.
Par exemple : Microsoft Visual Studio 2012 Express

Une fois que vous avez un compilateur opérationnel, placez-vous dans le dossier où se trouvent les fichiers sources du module « ole » et exécutez la commande suivante :

-->exec builder.sce;

Scilab doit renvoyer :

Création des macros...
-- Création de [automationlib] (Macros) --
genlib : Traitement du fichier : %VARIANT_e.sci
genlib : Traitement du fichier : %VARIANT_p.sci
genlib : Traitement du fichier : %VARIANT_size.sci
genlib : Traitement du fichier : %ptr_p.sci
genlib : Traitement du fichier : ole_getOlePath.sci
genlib : Régénère les noms et les bibliothèques

Il est maintenant possible de charger le module dans Scilab :

-->exec loader.sce;
Start Automation for Scilab
    Load gateways
    Load macros

Vous pouvez maintenant utiliser la fonction ole_actxserver (comme la fonction MATLAB actxserver). Par exemple pour interfacer Scilab avec Excel :

Excel = ole_actxserver("Excel.Application")

Vous trouverez différents tests dans le fichier « examples.sce ». Tous ne fonctionneront peut être pas en fonction des éléments de Windows installés ou non sur votre machine. N’exécutez donc pas le script en entier, mais faîtes plutôt des copier/coller des blocs de code susceptibles de fonctionner.

Erreur « ‘VCExpress.exe’ n’est pas reconnu… » avec Visual Studio 2012 Express

A la compilation avec Visual Studio 2012 Express, Scilab renvoi le message suivant :

!'VCExpress.exe' n'est pas reconnu en tant que commande interne   !
!                                                                 !
!ou externe, un programme exécutable ou un fichier de commandes.  !

Depuis la version 2012, l’exécutable ne se nomme plus « VCExpress » mais « WDExpress ». Ouvrez le fichier « builder.sce » et modifiez le bloc suivant :

    compiler = findmsvccompiler();
    if strstr(compiler, "express")  "" then
        compilerbin = "VCExpress.exe ";
    else
        compilerbin = "devenv.exe ";
    end

en

    compiler = findmsvccompiler();
    if strstr(compiler, "express")  "" then
        compilerbin = "WDExpress.exe ";
    else
        compilerbin = "devenv.exe ";
    end

Exécutez à nouveau « builder.sce »

Conclusion

Voila, vous pouvez maintenant faire appel à automation depuis Scilab pour communiquer entre différents processus Windows.

Et vous ?

  • Avez-vous déjà utilisé Automation avec Scilab ?
  • Dans quel but ?
  • Avez-vous rencontré des problèmes ?

6 réflexions au sujet de « Utiliser Automation depuis Scilab sur Windows »

  1. Helber

    Bonjour,

    J’obtiens l’erreur
    !’VCExpress.exe’ n’est pas reconnu en tant que commande interne !
    ! !
    !ou externe, un programme exécutable ou un fichier de commandes. !

    avec Visual Studio 2012 for desktop. C’est normal? Quand je change VC en WD, ça ne marche pas non plus…
    Help?
    Merci

    [Edit] Le problème a été résolu sur le forum Scilab : Problème mise en place Ole (com Scilab Office)

    Répondre
        1. Avatar de DutDut Auteur de l’article

          Ouvre le fichier builder.sce du dossier ole-master et remplace le bloc suivant :

          compiler = findmsvccompiler();
          if strstr(compiler, "express") <> "" then
              compilerbin = "VCExpress.exe ";
          else
              compilerbin = "devenv.exe ";
          end

          par :

          compiler = findmsvccompiler();

          [n, MSVCVersionNumber, MSVCEdition] = msscanf(compiler, "msvc%d%s")

          if strcmpi(MSVCEdition, "Express") == 0 then
              if MSVCVersionNumber<110 then
                  exe = "VCExpress.exe"
              else
                  exe = "WDExpress.exe"
              end
          else
              exe = "devenv.exe"
          end

          compilerbin = """" + winqueryreg('HKLM', 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\' + exe) + """ "

          Fait de même dans le fichier cleaner.sce

          Répondre
          1. Helber

            Fait. Maintenant j’ai ce message:

            -->compiler = findmsvccompiler()
             compiler  =
             
             msvc110express  
             
            -->exec builder.sce;
            Attention : Redéfinition de la fonction : main_builder            . Utilisez funcprot(0) pour ne pas afficher ce message.

             !--error 999
            winqueryreg : Impossible de renseigner la valeur de ce type.
            at line      46 of function main_builder called by :  
            main_builder();
            at line      93 of exec file called by :    
            exec builder.sce;
            Répondre

Répondre à Dut Annuler la réponse.

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>