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 :

Utilisation d'une DLL écrite en C++, passage de paramètres


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Utilisation d'une DLL écrite en C++, passage de paramètres
    Bonjour,

    J'ai récupéré une DLL écrite en C++ qui met à ma disposition une fonction qui, à partir d'un chaine de caractères, mouline et m'en ressort une autre.
    J'aimerais l'utiliser (en codant sous delphi).

    Je la charge donc de manière statique (pas gênant dans mon cas).

    La fonction que j'appelle est définie comme suit en C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool CalculCATChecksum(char* sCATPayLoad, char* sCATCheckSum);
    Elle demande donc, en entrée, un pointeur sur une chaine de caractères, et une autre qui sert en réalité de sortie.

    Je tente donc de lui passer ma chaine de caractères définie à partir du pascal en faisant un PChar, que je passe à la fonction. De même pour le 2ème argument, qui est la sortie.

    L'appel de la fonction dans la DLL se passe mal : j'ai droit à une erreur de violation d'accès mémoire... (EAccessViolation) :
    'Violation d'accès à l'adresse 10001405 dans le module 'maDLL.dll'. Ecriture de l'adresse 004572AC'

    J'ai essayer de lui passer un pointeur sur un String que j'ai créé moi même : même résultat.

    Auriez vous une idée de la méthode à utiliser pour résoudre ce problème?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Il n'y aurait pas un problème de pointeur dans ta procédure en C++ ? Ce genre d'erreur vient généralement d'une mauvaise désallocation ou d'un déréférencement pas correct...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En fait, la DLL en C++ m'a été fournie compilée donc pas vraiment moyen de savoir. Le truc c'est que quand cette DLL est utilisée depuis un programme C++, ça ne pose aucun problème donc je me dis que ça vient de moi :/

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 444
    Points
    59 444
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Peut-on voir un extrait du code d'appel ?
    Quelle est la convention d'appel de la fonction ? _CDECL, _STDCALL, _FASTCALL, _PASCAL ?

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Citation Envoyé par Plantex
    En fait, la DLL en C++ m'a été fournie compilée donc pas vraiment moyen de savoir. Le truc c'est que quand cette DLL est utilisée depuis un programme C++, ça ne pose aucun problème donc je me dis que ça vient de moi :/
    Le C/C++ est un peu plus permessif que le Pascal Il est possible que le code C++ soit correct mais laisse un "vide", que L'application faite en Delphi n'accepte pas...

    Montre nous le code, comme l'a suggéré Alcatîz

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    voilà le code concernant l'appel de la fonction
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function CalculCATChecksum(sCATPayLoad, sCATChecksum: PChar ): boolean; stdcall; external 'CalculCATChecksum.dll';
    ...
     
     
    procedure TForm1.Button3Click(Sender: TObject);
    var
            entree, sortie : String;
            Pentree,Psortie : PChar;
            bool : boolean;
     
    begin
            entree := 'azert';
            sortie := #0#0;
            entree[6] := #0;
     
     
            Pentree := PChar(entree);
            Psortie := PChar(sortie);
     
     
     
     
            bool := CalculCATChecksum(Pentree, Psortie);
            Edit2.Text := IntToStr(toto);
    end;
    j'espère que ça aide, mais j'en suis pas sûr.

    Merci en tout cas !

  7. #7
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 444
    Points
    59 444
    Billets dans le blog
    2
    Par défaut
    Es-tu sûr de la convention d'appel stdcall ? Cela ne coûterait rien d'essayer la convention standard cdecl.
    Je n'ai pas d'autre idée pour l'instant

Discussions similaires

  1. utilisation d'une dll écrite en C
    Par liliputien2002 dans le forum Interfaçage autre langage
    Réponses: 3
    Dernier message: 26/11/2008, 15h30
  2. Utiliser une dll écrite en C++/CLI
    Par scolyo dans le forum C#
    Réponses: 3
    Dernier message: 09/10/2008, 11h09
  3. [VC++] Utilisation d'une DLL écrite en C++ avec mingw.
    Par swirtel dans le forum Visual C++
    Réponses: 1
    Dernier message: 20/06/2007, 10h42
  4. Réponses: 1
    Dernier message: 10/05/2006, 19h45
  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