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

Langage Delphi Discussion :

Importer une DLL Matlab dans Delphi


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de 123djimy
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 36
    Points : 41
    Points
    41
    Par défaut Importer une DLL Matlab dans Delphi
    Salut,
    J'ai essayé de faire appel à une fonction foo.m contenue dans une DLL mylib.dll construite par Matlab,

    Voici le code Matlab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function y = foo(x)
    y = 2*x
    et voici le code Delphi:
    Code : 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
    procedure TForm1.Button1Click(Sender: TObject);
    var
       a,b:double;
       DLLHandle: Thandle;
       foo: Function (Num:double):double; {$IFDEF WIN32} cdecl; {$ENDIF}
    begin
       DLLHandle := LoadLibrary('mylib.dll');
       try
           @foo := GetProcAddress(DLLHandle, 'foo');
           a:=StrToFloat(edit1.Text);
           b:=foo(a);
           edit2.Text:=FloatTostr(b);
       finally
         FreeLibrary(DLLHandle);
       end
    end;
    mais lors de l'exécution j'ai eu une exception:
    Exception class EAccessViolation with message 'Access violation at address 00000000. Read of address 00000000'.
    je ne trouve pas de solution pour ce problème,
    Merci d'avoir m'aider
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Je pense que vous n'avez pas regardé la documentation fournie avec Matlab.

    Après une rapide analyse avec un outil comme Dependency Walker, j'ai constaté que :
    1. votre dll nécessitait la présence d'au moins une dll annexe, surement fournie par MatLab : MCLMCRRT713.DLL (MatLab Compiler Runtime ?),
    2. votre dll exporte plusieurs fonctions avec une convention d'appel de type C (cdecl, stdcall ou safecall pour Delphi, le 1° choix me parait à priori le plus pertinent) :
      • _mlfFoo
      • _mlxFoo
      • _mylibGetMcrID
      • _mylibInitialize
      • _mylibInitializeWithHandlers
      • _mylibPrintStackTrace
      • _mylibTerminate

    Cela amène 3 remarques supplémentaires :
    1. votre dll a peut être besoin d'être initialisée avant toute autre opération (fonctions _mylibInitialize*) et libérée en fin de traitement (fonction _mylibTerminate)
    2. votre dll exporte 2 fonctions qui devraient correspondre à ce que vous avez défini dans MatLab (_mlfFoo et _mlxFoo : à confirmer f pour float, x pour eXtended ?)
    3. votre dll est native ou managée ?

    En conclusion, RTFM ou LCPM pour les francophones...
    Et vous fournira également des pistes...
    Images attachées Images attachées  
    Philippe.

  3. #3
    Membre du Club Avatar de 123djimy
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 36
    Points : 41
    Points
    41
    Par défaut
    Bonjour, je vous remercie pour votre réponse.
    Je pense que ce n'est pas possible d'utiliser une DLL Matlab avec Delphi.
    -Est ce qu'il y a une autre solution pour intégrer les fonctions écrites par Matlab dans mon projet?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 456
    Points : 24 868
    Points
    24 868
    Par défaut
    N'existe-t-il pas un ActiveX MatLab qui serait peut-être plus simple que l'utilisation directe de la DLL
    Il y a un mode OLE puisqu'il existe un 'matlab.application'

    Le Section MATLAB sera peut-etre plus précise que la section Delphi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. importer une dll c dans windows Phone7
    Par jalil1988 dans le forum Windows Phone
    Réponses: 3
    Dernier message: 10/05/2012, 10h51
  2. Utiliser une DLL Matlab sous Delphi
    Par airefrais dans le forum Langage
    Réponses: 4
    Dernier message: 24/07/2009, 10h16
  3. Comment importer une DLL dans du code???
    Par Jayceblaster dans le forum Delphi .NET
    Réponses: 29
    Dernier message: 19/04/2006, 19h19
  4. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15
  5. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 09h19

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