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 :

Pointeurs de fonction un peu originaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut Pointeurs de fonction un peu originaux
    Bonjour,

    Voici mon probleme. Je voudrais que mon programme principal scan un repertoire et y cherche toutes les dll presentes. Une fois ceci fait, je voudrais qu'il appelle un point d'entree de chacune de ces dll qui soit toujours le meme, et que lors de cet appel, les dll retournent un tableau de pointeurs de fonctions...

    Est-ce possible ?

    Dans le cas contraire je voudrais savoir comment faire pour connaitre tous les points d'entree d'une dll si on n'a pas la lib, ni le .h et du coup instancier un pointeur de fonction sur chacun de ces points d'entree.

    Est-ce possible aussi ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Est-ce possible ?
    Il n'y a pas d'impossible, seulement des choses difficiles.

    Dans le cas contraire je voudrais savoir comment faire pour connaitre tous les points d'entree d'une dll si on n'a pas la lib, ni le .h et du coup instancier un pointeur de fonction sur chacun de ces points d'entree.
    En fait, si tu n'as aucune matière, ça va être difficile , une dll n'a pas de point d'entrée propre mais plusieurs points d'entrée (un par fonction de la dll en fait).

    En fait la manière de réaliser ceci dépend fortement du système sur lequel tu travailles.

  3. #3
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut
    Je travaille sous Windows. En gros je voudrais avoir un noyeau qui sait analyser les commandes tapees sous la console, puis suivant celles-ci, il les redistribue aux differentes dll qui savent les gerer.

    Une autre solution serait peut etre de passer a chaque dll la commande, via un meme point d'entree et ensuite, seule celle sachant la traiter s'en charge...

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Je pense que tu devrais te rediriger vers le forum developpement windows parce que comme je te l'ai dis, c'est spécifique à une platteforme.

    Pour ton cas, juste comme ça, c'est analyse lexicale puis appel de fonction dans les dll, ça ne pose aucun souci !

  5. #5
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut
    Citation Envoyé par PRomu@ld
    Pour ton cas, juste comme ça, c'est analyse lexicale puis appel de fonction dans les dll, ça ne pose aucun souci !
    Ben justement je vois pas trop comment faire cela, j'aurais plus tendance a envoyer la commande a chaque dll qui du coup se tape l'analyse lexicale. Car dans le cas contraire, suivant le resultat de l'analyse il faut que je sache quel point d'entree de quelle dll appeler, or comme le noyeau ne sait pas combien il y aura de dll lancees, ni combien de points d'entree chacun aura, ben du coup c'est un peu galere non ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Non, le plus "galère" sera pour l'appel lui-même: Tu ne peux pas faire d'appel dynamique de fonctions sans assembleur (ou sans une bibliothèque trifouillant en assembleur), car tu n'as pas de contrôle de la pile.

    Résultat, à moins d'avoir des fonctions prévues pour (va_list, ou bien paramètres type "main", comme sous tclcl) tu ne pourras pas faire grand-chose pour les appeler...
    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.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par barthelv
    Je travaille sous Windows. En gros je voudrais avoir un noyeau qui sait analyser les commandes tapees sous la console, puis suivant celles-ci, il les redistribue aux differentes dll qui savent les gerer.

    Une autre solution serait peut etre de passer a chaque dll la commande, via un meme point d'entree et ensuite, seule celle sachant la traiter s'en charge...
    Même si, je crois, il existe une commande de Windows qui permet de lister les points d'entrée d'une DLL, tu n'auras aucune information complémentaire concernant
    • Son interface (parmamètres d'entrée/sortie, retour)
    • Son comportement

    Donc, je ne vois pas trop l'intérêt. Si tu n'as pas la doc des DLL (SDK), c'est que tu n'as pas à faire de développement avec. Serait-tu en train de faire des actions illégales ?

  8. #8
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Donc, je ne vois pas trop l'intérêt. Si tu n'as pas la doc des DLL (SDK), c'est que tu n'as pas à faire de développement avec. Serait-tu en train de faire des actions illégales ?
    Pas du tout, c'est moi qui developpe ces DLLs. Et je n'ai pas besoin de faire un programme pour connaitre les points d'entree d'une dll, il me suffit pour cela d'utiliser Dependency Walker.

    Non ce qu'il se passe c'est que je veux faire un truc du style l'utilisateur tape une commande, genre "convert", et moi je veux savoir quelle est la DLL qui sait gerer la commande "convert". Donc mon idee originelle etait que au chargement de mon programme, il liste les DLL presentes dans son repertoire, et que celles-ci lui renvoient un tableau associant un nom de commande comme "convert", a un point d'entree a appeler, d'ou ma question.

    Avec le recul, je pense qu'un point d'entree unique pour chaque DLLs devant etre implemente, nomme "run", auquel je file la commande, et qui gere lui meme l'analyse pour savoir s'il sait gerer la commande est beaucoup plus simple a implementer.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    C'est un peu ce que fait tclcl pour voir les méthodes tcl implémentées par le coté C++ d'un objet.
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56
  2. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  3. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03
  4. [Kylix] Pointeur de fonctions
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 03/07/2003, 10h17
  5. pointeur de fonction
    Par kardath dans le forum C
    Réponses: 4
    Dernier message: 28/12/2002, 14h39

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