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 sans les sources (.c)


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut Création d'une DLL sans les sources (.c)
    Bonjour à tous !!!

    Voilà, j'ai une bibliothèque (*.lib) et les header (*.h) associés, mais je ne dispose pas des codes sources (*.c).
    Le problème c'est que j'ai besoin d'une bibliothèque dynamique (pour ensuite l'utiliser en python).

    Donc, j'aimerais savoir comment faire pour générer une dll sans avoir les codes sources (*.c).

    Je me dit que c'est peut être possible car toutes les fonctions sont en binaire dans la bibliothèque statique (*.lib).
    Mais étant donné que pour généré un .dll il faut ajouté un "__declspec(dllexport)" dans les fonctions, je ne suis sur que ce soit possible.



    Question supplémentaire (Simple curiosité) :
    Comment distingué si un .lib a été codé en C ou en C++ ?
    j'ai également les .h, pêut etre que ca peut aidé ^^


    Merci d'avance ! ^^

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il devrait être possible d'écrire tout simplement un wrapper tout simple pour chaque fonction de la bibliothèque en question, et exporter chaque wrapper, avec un fichier .def pour garantir le nom de chaque fonction...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Un wrapper ?
    qu'est-ce donc ?

    Je vais essayer de trouver des informations à ce sujet.

    EDIT:
    J'ai trouvé plusieurs définition décrivant un wrapper comme un "englobant"...
    Mais ça ne me parle pas du tout.

    un exemple serait le bienvenu ^^'

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Le cython ne me permettrait-il pas d'utiliser ma bibliothèque statique directement ?
    Car contrairement au python pure, peut-il gérer ces dernières ?

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Bonjour,

    Citation Envoyé par joks93440 Voir le message
    Un wrapper ?
    qu'est-ce donc ? J'ai trouvé plusieurs définition décrivant un wrapper comme un "englobant"...
    Mais ça ne me parle pas du tout.
    « To wrap » signifie « emballer », comme l'emballage d'une friandise, par exemple. Un wrapper est donc une couche logicielle qui vient s'ajouter « tout autour » d'un produit logiciel déjà existant et qui s'appuie dessus. En général, cette couche n'apporte rien de plus, ou guère. Elle est généralement utilisée pour faire une adaptation d'interface.

    Dans le cas présent, il s'agit simplement de réécrire tout simplement les prototypes de tes fonctions, les exporter convenablement et faire en sorte qu'ils se contentent d'appeler ta bibliothèque initiale.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Merci de ta réponse, et excuse moi de cette réponse si tardive mais étant en alternance je ne suis pas a plein temps sur le projet.

    Etant débutant j'ai un peu du mal a suivre.
    quelqu'un pourrais m'expliquer où dois-je réécrire mes prototypes ? comment les exporter "convenablement" ?


    Désolé de la gène, mais si quelqu'un pouvais prendre le temps de m'expliquer comment procéder, je lui en serait vraiment reconnaissant !

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un truc de ce genre, pour chaque fonction de la bibliothèque statique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Bibliotheque.h
    int UneFonction(int);
    void UneAutreFonction(char*);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //MaDLL.c
    #include "Bibliotheque.h"
     
    int wrapUneFonction(int a)
    {
    	return UneFonction(a);
    }
     
    void wrapUneAutreFonction(char* a)
    {
    	UneAutreFonction(a);
    }
    Code MaDLL.def : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LIBRARY "MaDLL"
     
    EXPORTS
    UneFonction=wrapUneFonction
    UneAutreFonction=wrapUneAutreFonction
    Et encore, il y a peut-être même plus simple.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    ok ca a l'air plus simple avec des exemple merci BEAUCOUP !

    je récapitule :

    Je créer un MaDLL.c et MaDLL.def, mais je ne touche pas à mes fichiers *.h utilisés par ma lib statique.

    Dans le .c je refais en quelque sorte les prototypes des fonctions, et dans le .def je fait le lien entre le nom des fonctions du .h et celles des fonction de mon maDLL.c.
    Après compilation cela produit un fichier exemple.dll

    C'est bien ça ?

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Oui.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Avant de compiler j'ai linké la librairie (*.a) mais que dois-je faire du .def ?
    Je le link également ?

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ah, je ne sais même pas si MinGW reconnait les fichiers .def.
    Mais normalement, il faut tous les passer au linker: Ton fichier source, le .def et la bibliothèque statique que tu utilises.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Comment exposer les méthodes d'une DLL sans com
    Par Ekinx93 dans le forum Débuter
    Réponses: 12
    Dernier message: 24/10/2011, 18h35
  2. Utiliser une DLL sans les headers
    Par Ange_blond dans le forum C++
    Réponses: 16
    Dernier message: 23/02/2009, 09h02
  3. Réponses: 3
    Dernier message: 17/07/2006, 17h04
  4. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 11h32
  5. [VB6]ouvrir une DLL sans en conaitre le nom à la creation
    Par victorracine dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/02/2004, 15h16

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