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 :

Probléme DLL


Sujet :

Langage Delphi

  1. #1
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut Probléme DLL
    Bonjour

    J'ai un petit probleme avec l'utilisation d'une DLL que j'ai ecrit moi meme en C.

    Voila la declaration de ma fonction Cdans la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DLLIMPORT void ma_procedure(char *name,char *clef);
    et voila la maniere dont j'utilise cette fonction dans mon programe Delphi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure ma_procedure(name,clef : PChar);stdcall ;external 'DLL1.dll';
    ....
    ....
             clef:=PChar(MaskEdit1.text);
             name:='mm.txt';
              ma_procedure(name,clef );
    J'optient une erreur : "EStackOverFlow" lors de lexecution.
    J'ai debuger mon programe (OllyDBG) pour voir ce qui ce passe. La procedure ce deroule normalement et c'est qu'apres que la procedure se soit terminé qu'il y a cette erreur.
    Comme j'ai douter que sa venait d'un probleme de memoir avec les parametres de la fonction, j'ai enlever les parametres (dans la DLL et l'exe) et l'erreur disparet.
    J'ai essayer de passer les parametres de la procedure par valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DLLIMPORT void ma_procedure(char name[200],char clef[100]);
    mais rien ne change .
    Le probleme vient donc peut etre du fait qu'une foit que la procedure est terminee, les variable sont detruites, et ces variable appartienne au programe principal (je ne suis pas sure ).
    J'ai trouver quelques solution pour la getion de la memoire mais avec des DLL ecrite en Delphi (BORLNDMM.DLL) mais je ne voit pas quoi faire pour mon probleme

    Merci d'avance .

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Pourquoi la procédure n'est elle directement pas appellée avec les PChars qui vont bien, à savoir directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_procedure(PChar(Name), PChar(MaskEdit1.text));
    Ensuite, il faut garder à l'esprit que PChar(UnString) convertir la variable de type string en une zone exploitable comme un PChar() par l'application mais tout de même gérée par Delphi. C'est à dire en gros que tu ne peux exploiter le résultat de cette conversion qu'en lecture dans ta DLL. Sinon, il faut passer par un "vrai" tableau de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      LBuffer: array [0..100] of char;
    begin
      StrPLCopy(LBuffer, MaskEdit1.Text, SizeOf(LBuffer);
      ma_procedure(nil, @LBuffer);
    end;
    Je n'ai dans l'exemple de code ci-dessus traité que le cas de la seconde variable, si la première doit elle aussi être modifiée côté DLL, il faudra lui appliquer une technique similaire.

    Enfin, une fois pour toutes : si tu gères bien le passage des PChars, c'est à dire en gros que si tu ne fais pas n'importe quoi avec, premièrement, ca ne plante pas, ensuite il est inutile d'utiliser la DLL de Borland dans ton projet !!
    "It's more fun to compute !"

  3. #3
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    Enfin sa fonctione avec les array de char, Merci beaucoup.

    Pourtant je ne comprend pas pourquoi sa fonctionait pas avant, puisque les chaine etait juste lues mais pas manipuler

    Mais bon l'important c'est que sa marche

    Encor merci .

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

Discussions similaires

  1. Problème dll et transmission exception
    Par tourlourou dans le forum Delphi
    Réponses: 4
    Dernier message: 03/09/2007, 21h23
  2. Problème DLL et Lotus
    Par Marty000 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 17/11/2006, 14h00
  3. [VB.NET] Problème Dll
    Par olbi dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/07/2006, 14h13
  4. VB6 Problème dll
    Par erwan.bodere dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/07/2006, 16h52
  5. Problème DLL Excel-C++-NaG
    Par maximeb dans le forum C++
    Réponses: 2
    Dernier message: 03/07/2006, 16h51

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