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 :

Compatibilité C et Delphi pour une DLL


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut Compatibilité C et Delphi pour une DLL
    Bonjour,

    Voici quelque temps déja que je développe en delphi et je me trouve face a un problème... bizarre et malgré mes recherche je bute dessus :

    Je voudrai utiliser une DLL développée en c/cpp, jusque là rien d'exceptionnel.

    J'ai trouvé une application qui utilise cette dll et j'obtiens des résultats. (normal)

    Mais quand j'utilise la même dll en delphi, les résultats sont complétement différents.

    Pourquoi? Y a-t-il une incompatibilité entre delphi et c/cpp?

    Merci a ceux qui prendront le temps de m'aider.

  2. #2
    Candidat au Club
    Homme Profil pro
    Concepteur développeur
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Concepteur développeur

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut
    Bonjour,

    As-tu utilisé la directive stdcall dans la déclaration des méthodes coté Delphi ?
    Cette directive permet de passer les paramètres de façon standard pour les méthodes d'une dll.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut
    Oui, j'utilise bien stdcall, voici comment elles sont déclarées:

    function dxl_read_word(id : integer; address : integer): integer; stdcall; external 'dynamixel.dll';

    J'ai fais un croisé avec les réponse reçus en c/cpp et les réponses reçus en delphi... et je ne trouve aucune cohérence.

    Un projet bloqué a cause d'une intolérence de dll.... c'est vexant....
    je trouverai la solution.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 124
    Par défaut
    stdcall ce n'est pas forcément le choix du développeur C, il existe aussi cdecl
    tu n'aurais pas un fichier H avec la DLL pour être sûr de la convention d'appel et surtout du langage C et C++ sont subtilement différent !

    dxl_read_word, si le nom est cohérent, cela devrait lire un word (16bit) et non un integer (32bit)
    int en C c'est 16bit mais int en C++ c'est 32bit
    long ing en C c'est 32 bit, long int en C++ c'est 32bit

    Et puis c'est écrit dans la documentation : Information of 2 byte can be read on Dynamixel
    tout comme "It has outstading portability in each platform since written in C language."

    les int du C deviennent des Word en 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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut
    Merci pour vos réponses !!! à défaut de résoudre mon problème, elles m'ont permis de me poser d'autres questions, et m'ont donné d'autres pistes de recherche.

    Effectivement la fonction "dxl_read_word" lit un word plutôt qu'un integer, j'ai pas fait attention...

    Mais mon problème reste entier.

    Je pensais que mon problème venait de la dll... Je vais plutôt chercher du côté de mes déclarations de la dll.

    J'ai le fichier .h de la dll.

    Qu'est ce que je dois chercher dedans ? pour vérifier mes déclarations ?

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 124
    Par défaut
    C'est évident, tu dois consider le H et la documentation avec une norme C donc 16 bit par défaut et non C++ qui est 32 bit par défaut !
    int => Word n'est qu'une partie !
    la convention d'appel est probablement cdecl du C et non stdcall, je ne suis pas assez habitué au C pour être sûr de cela
    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. Passage d'un code AutoIt vers Delphi (pour une dll MMB)
    Par Frencher dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 20/09/2012, 19h45
  2. problème de syntaxe delphi pour une requête sql
    Par socooooool dans le forum Bases de données
    Réponses: 12
    Dernier message: 07/07/2006, 17h53
  3. Question sur exports et les classes (pour une dll)
    Par DjPoke dans le forum Langage
    Réponses: 7
    Dernier message: 08/08/2005, 20h25
  4. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 28/07/2004, 00h05
  5. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 22h07

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