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

C Discussion :

Création d'une DLL utilisable en Delphi


Sujet :

C

  1. #1
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut Création d'une DLL utilisable en Delphi
    Bonjour à tous,

    ma question provient en gros de deux lacunes dans mes connaissances; mon but est de développer une DLL en C qui soit par la suite utilisable tant en C qu'en Delphi.

    Ne connaissant ni le Delphi, ni la base de création d'une DLL (), j'aurais aimé savoir si quelqu'un pourrait m'aiguiller sur un lien concernant les "good practices" qu'il faut avoir pour créer une DLL et la documenter (j'imagine qu'il faut fournir un quelconque fichier de réference..) De plus si quelqu'un peut me dire s'il y a des contraintes supplémentaires auxquelles je dois faire attention afin que la DLL soit "compatible Delphi", c'est volontiers

    Merci d'avance et bonne soirée!

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Pour la création de DLLs, tu peux avoir une sorte d'introduction ici.

    Ensuite, pour qu'une DLL créée en C soit utilisable dans un autre langage, il faut :

    - que les fonctions exportées (grossièrement : "les fonctions de ta DLL") utilisent la convention d'appel stdcall (car c'est une des conventions d'appel supportée par Delphi et bien d'autres langages).

    - optionnellement (mais assez importante car simplifie l'utilisation de la DLL et maximise sa portabilité), que leur nom ne soient pas décorés (Visual C++ par exemple renomme parfois une fonction stdcall nommée f en une fonction nommée _f@machin-truc (version "décorée" de f) à l'intérieur de la DLL !).

    Le mot-clé __stdcall (reconnu par la plupart des compilateurs Windows (Visual, GCC, Borland C, etc.) permet d'indiquer au compilateur que la fonction utilise la convention d'appel stdcall. Par exemple (Fichier : exemple.c) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int __stdcall f(void)
    {
        return 0;
    }
     
    int __stdcall g(int n)
    {
        return n;
    }
    Pour exporter ces fonction, ajoute à ton projet un fichier DEF (.def) au lieu d'utiliser dllexport. Cela permet de ne pas décorer leur nom au cas ou tu compiles avec Visual. Par exemple (Fichier : exemple.def) :
    Compile le projet. La DLL produite sera utilisable dans tous les langages supportant la convention d'appel stdcall (pratiquement : tous les langages utilisables sous Windows).

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    WinLog est une DLL écrite en C et C++ et utilisable par tous les langages (interface C).

    Tu peux t'en inspirer, pour récupérer le projet, regarde le §3.5

  4. #4
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Merci pour vos réponses!

    Une question encore; en sortie de la compilation de mon projet, j'obtiens bien une dll, seulement, imaginons que je transmette cette dll à quelqu'un afin qu'il puisse utiliser mes fonctions utilisant la convention d'appel stdcall.

    Cette personne aura-t-elle moyen de connaitre quelle est la structure de ces fonctions (parametres et type de retour) ou le seul moyen est-il que je le lui communique directement?

    Allez je me lance dans la création de dll, yipeeeee

    Merci encore

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    La DLL n'est utile que pour exécuter le programme.

    Pour compiler le programme, il faut livrer le .h de la DLL qui déclare les fonctions et les éventuelles structure et define utilisés et/ou retournés par les fonctions.

    De plus, il faut aussi livrer le .lib qui permet l'édition de liens.

    En environnement de développement, une DLL, c'est au moins 3 fichiers : dll, lib, h

  6. #6
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Okay!

    beaucoup pour vos explications, tant claires que rapides!

  7. #7
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Je me permets de continuer la discussion, vu que je reste vraiment dans le meme sujet:

    apparemment ma dll fonctionne pas trop mal, excepté pour toutes les fonctions qui prennent en parametre des strings.

    Coté code c++, j'ai betement utilisé:
    #include <string>

    et déclaré mes parametres en tant que string, mais ca ne semble pas ffonctionner. Faut-il un format spécial qui soit "compatible entre c++ et delphi" ?

    Merci d'avance et un très bon week-end ensoleillé à tous!

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Les strings C++ sont clairement inconnues du Delphi.

    Il faut voir dans la doc de Delphi, mais je suppose qu'au moins un de ces trois trucs doit marcher:
    • char * / char const * : Tableau de caractères dits "ANSI" (en vérité Windows-1252 le plus souvent).
    • wchar_t * / wchar_t const * : Tableau de caractères Unicode (UTF-16).
    • BSTR : Chaîne de caractères Visual Basic et COM.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/04/2010, 12h34
  2. Utiliser une dll C# avec delphi
    Par Gruick dans le forum Débuter
    Réponses: 8
    Dernier message: 19/06/2008, 10h23
  3. Utilisation d'une DLL créée en DELPHI
    Par JP.NUAGE dans le forum Langage
    Réponses: 6
    Dernier message: 03/06/2008, 11h40
  4. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h24
  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