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

Delphi Discussion :

DLL c++ impossible de trouver la fonction


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Par défaut DLL c++ impossible de trouver la fonction
    bonjour à tous,

    Me voici avec un problème que je n'arrive pas a solutionner même en farfouillant dans le forum :

    Je cherche à executer une fonction dans une DLL C++ a partir de Delphi.

    j'ai d'abord crée une DLL en Delphi et je l'ai appelé de puis mon prog, pour le debug, et ça marche nickel.

    ensuite je mets la DLL que l'on me livre et la, impossible de me connecter au fonctions de la DLL, la DLL se charge bien mais l'assignation des fonction par GetProcAdress ne marche pas.

    a force de chercher, j'ai fait un Tdump et voilà le résultat : bizarre.....

    (j'ai mis les trois point pour pas vous embéter avec toutes les fonctions exporter)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Display of File toto_h.dll
     
    ...
    EXPORT ord:0004='?conTH@@YAHPAD000PAH00000@Z'
    ...
    EXPORT ord:0007='?resTH@@YAHPAD000PAH00000@Z'
    le nom des fonction que je cherche sont bien resTH et conTH mais la c'est bizarre tous ces caractères avant et aprés non

    dans "dependency Walker " il faut que je clique sur "undecorate C++ fonction"

    pour voir alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int conTH(char *,char *,char *,char *,int *,char *,char *,char *,char *,char *)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int resTH(char *,char *,char *,char *,int *,char *,char *,char *,char *,char *)
    ça ca correspond bien à ce que je veux ..

    j'ai l'impression que mon problème vient de là . qu'en pensez vous ???

    Pour plus d'info voici le code de mon prog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResTHInDLL: function(ID, DP, OPR: Pchar; DHr: PChar;out  CodeRetour: PInteger;out Quad: Pchar; Host, User, Pass, Db: Pchar): Integer; cdecl;
    et l'association via GetProcAdress :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          ResTHinDLL := GetProcAddress(hDLLHandle, ResTH);
     
          if not assigned(ResTHinDLL) then
            begin
              mess := 'resTH introuvable dans la DLL';
            end;
    la déclaration de la fonction dans la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    __declspec(dllimport) int resTH(char *, char *,char *,char *,int *,char *,char *,char *,char *,char *);

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut et bienvenue sur Developpez.com
    Je ne suis pas un spécialiste des DLL mais je crois que ton erreur vient de là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ResTHinDLL := GetProcAddress(hDLLHandle, ResTH);
     
    if not assigned(ResTHinDLL) then
    begin
      mess := 'resTH introuvable dans la DLL';
    end;
    T'as oublié des @ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @ResTHinDLL := GetProcAddress(hDLLHandle, ResTH);
     
    if not assigned(@ResTHinDLL) then
    begin
      mess := 'resTH introuvable dans la DLL';
    end;
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Par défaut
    Ok je vais voir mais je ne pense pas que ça vienne de la, car mon code fonctionne trés bien avec ma DLL faites en Delphi, mais pas avec celle qui m'est livrée et qui est developpée en C++.

    En tous cas merci.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    et si tu essayes de la récupérer par index au lieu de la récupérer par nom ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Par défaut
    Citation Envoyé par tourlourou
    et si tu essayes de la récupérer par index au lieu de la récupérer par nom ?
    Pareil en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @ResTHinDLL := GetProcAddress(hDLLHandle,'7');
    ça marche pas....

    je comprends pas on dirait que ça vient de la declaration qui est pas la même.... pourtant il me semble que la liaison C++ Delphi sur les c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char * (C++)  --> Pchar (Delphi)
    int * (C++) --> Pinteger (Delphi)
    en tous cas c'est ce que j'ai fait...

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Visiblement, le problème vient de la déclaration de ta fonction externe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResTHInDLL: function(ID, DP, OPR: Pchar; DHr: PChar;out  CodeRetour: PInteger;out Quad: Pchar; Host, User, Pass, Db: Pchar): Integer; cdecl;
    D'où tiens-tu le nom des variables (ID, DP, OPR, etc.)?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

Discussions similaires

  1. Erreur 523: impossible de trouver la dll de la base de donnees
    Par franck SEFIC dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/04/2008, 14h25
  2. DLL en C: Impossible de trouver le point d'entrée
    Par cyrille37 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 27/03/2008, 17h48
  3. Réponses: 9
    Dernier message: 22/10/2007, 09h38
  4. Réponses: 1
    Dernier message: 27/04/2007, 18h25
  5. Trouver une fonctions dans des DLL
    Par Mercenary Developer dans le forum Langage
    Réponses: 2
    Dernier message: 08/09/2005, 15h28

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