IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Appel de fonctions MATLAB depuis VSC++ 2010 [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut Appel de fonctions MATLAB depuis VSC++ 2010
    Bonjour,

    J'aimerais savoir si quelqu'un a déjà appelé des fonctions MATLAB depuis Visual C++, SVP ?
    1. Soit par API (Engine Matlab)
    2. Soit depuis une bibliothèque partagée statique (lib), créée depuis Matlab et appelée sous Visual

    Si oui, avez vous rencontré des difficultés ? Piège(s) à éviter ...

    Merci pour vos retours d'expérience

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Re bonjour,

    Personne ne peut m'aider ?
    De mon côté, j'ai avancé et reprenant le code contenu dans "engwindemo.c" dans le répertoire d'installation de MATLAB (pour ma part R2008a - 7.6.0.324)

    J'ai créé un projet sous Visual Studio C++ 2010 :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    #include "engine.h"
     
    #define BUFSIZE 256
     
     
    int PASCAL WinMain (HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR     lpszCmdLine,
                        int       nCmdShow)
     
    {
    	Engine *ep;
     
    	/*
    	 * Start the MATLAB engine 
    	 */
    	if (!(ep = engOpen(NULL))) 
    	{
    		MessageBox ((HWND)NULL, (LPSTR)"Can't start MATLAB engine",	(LPSTR) "Engwindemo.c", MB_OK);
    		exit (-1);
    	}
     
    	engClose(ep);
     
    	return(0);
    }

    J'ai volontairement enlevé ce qui ne m’intéressais pas dans un premier temps. La construction du projet se déroule normalement. Tout est bien construit.

    Par contre, en exécution, j'ai les messages suivant
    "L'application n'a pas réussi à s'initialiser correctement '0xc0000005) et "Exception non gérée à 0x7c977406 dans MatlabEngine.exe*: 0xC0000005: Access violation.
    Dois-je faire quelque chose de particulier ? style regsrv32 ? autre ?

    Merci pour votre aide,

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Pour commencer, suis plutôt à la lettre cet exemple "simple" : How can I compile a MATLAB Engine application using Microsoft Visual Studio 9.0 or 10.0 ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Ok merci pour la réponse et le lien.
    J'ai donc refait la manipulation en suivant la documentation du site de MathWorks. La petite application me renvoie la même erreur en debug de Visual Studio. Par contre, si je copie le binaire (dans mon cas "MatlabEngine.exe"), dans le répertoire de "matlabroot" : C:\Program Files\MATLAB\R2008a\bin\win32. Je n'ai pas l'erreur et cela fonctionne. Pour l'instant, j'ai :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    #include "engine.h"
     
    #define BUFSIZE 256
     
    static double Areal[6] = { 1, 2, 3, 4, 5, 6 };
     
    int PASCAL WinMain (HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR     lpszCmdLine,
                        int       nCmdShow)
     
    {
    	Engine *ep;
     
    	/*
    	 * Start the MATLAB engine 
    	 */
    	if (!(ep = engOpen(NULL)))
    	{
    		MessageBox ((HWND)NULL, (LPSTR)"Can't start MATLAB engine", (LPSTR) "Engwindemo.c", MB_OK);
    		exit(-1);
    	}
    	else
    		MessageBox ((HWND)NULL, (LPSTR)"MATLAB engine start", (LPSTR) "Engwindemo.c", MB_OK);
     
    	engClose(ep);
     
    	return(0);
    }
    Et j'ai le message "MATLAB engine start" qui apparait ... c'est déjà ça.

    Je continue donc mes recherches ... donc l'appel de MATLAB 2008a depuis Visual Studio 2010 ultimate fonctionne, car sur le site internet de MathWorks, j'ai n'ai pas vu le compilateur de VSC2010 Ultimate, il y a VS2005 Express VS 2008 Pro ....

    Merci,

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Mercusyo Voir le message
    Par contre, si je copie le binaire (dans mon cas "MatlabEngine.exe"), dans le répertoire de "matlabroot" : C:\Program Files\MATLAB\R2008a\bin\win32. Je n'ai pas l'erreur et cela fonctionne.
    Relis bien le point n°9 du lien que je t'ai donné précédemment.

    Il faut ajouter le chemin suivant à la variable d’environnement PATH de Windows :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files\MATLAB\R2008a\bin\win32

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Citation Envoyé par Dut Voir le message
    Relis bien le point n°9 du lien que je t'ai donné précédemment.

    Il faut ajouter le chemin suivant à la variable d’environnement PATH de Windows :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files\MATLAB\R2008a\bin\win32
    Bonjour,

    Oui, j'avais bien fait attention pour la variable d'environnement dans le PATH système de Windows XP (pour ma part). J'avais un second chemin "C:\Program Files\MATLAB\R2008a\bin\" également que j'ai supprimé et re démarrer l'ordinateur.

    Toujours le même souci, sous le répertoire "C:\Program Files\MATLAB\R2008a\bin\win32" mon binaire fonctionne mais pas dans un autre chemin (style C:\temp\MatlabEngine\Debug\)

    J'ai copié les 4 bibliothèques dynamiques DLL correspondant aux librairies utilisées statiquement dans la petite application, mais pareil, cela ne fonctionne pas; peut être qu'il manque encore des fichiers DLL à copier au même endroit que mon binaire ?

    A suivre ...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Bonjour,

    Bon je passe en "résolu" ce post, car effectivement celui-ci concernait l'utilisation du moteur Matlab 2008a depuis Visual Studio 2010 Ultimate. Cela fonctionne bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Appel de fonctions MATLAB depuis C++ Builder
    Par Mercusyo dans le forum MATLAB
    Réponses: 7
    Dernier message: 19/02/2014, 10h45
  2. Appel de fonctions MATLAB depuis VSC++ 2010
    Par Mercusyo dans le forum Visual C++
    Réponses: 1
    Dernier message: 28/10/2013, 13h21
  3. Appeler un fonction javascrit depuis un lien
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/04/2006, 08h53
  4. [Info] Appeler une fonction Ada95 depuis Java
    Par mmathieu dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 15/09/2005, 09h42
  5. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo