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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif 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
    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 confirmé
    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 : 39
    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
    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 : 62
    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
    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
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre très actif 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
    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 : 62
    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
    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
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre très actif 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
    Par défaut
    Okay!

    beaucoup pour vos explications, tant claires que rapides!

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