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 :

appel de dll dynamique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut appel de dll dynamique
    Bonjour à tous,

    bon je pose le probleme: je suis en stage et je travaille sous CVI. Le but de mon stage serait de m'affranchir de DLL interface qui gere l'appel à des DLL de traitement.

    Mon probleme et que je peux récupérer les E/S sous forme de chaine de caractére les convertir pour l'appel, en gros j'ai tous sauf que la signature du pointeur sur fonction doit etre construite dynamiquement.

    Alors je ne sais pas dois-je écrire du code dans du code ou trouvé un autre moyen

    je poste le source de mon fichier test je me tiens à dispo pour expliquer plus en détails.

    Merci d'avance.
    Fichiers attachés Fichiers attachés
    • Type de fichier : c main.c (2,6 Ko, 72 affichages)

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    On ne peut pas construire dynamiquement un appel de fonction sans jouer avec de l'assembleur.

    Il faut que les fonctions utilisées aient toutes le même prototype (ce que fait tclcl), ou un nombre fini de prototypes différents avec une valeur indiquant lequel utiliser pour telle fonction (ce que fait MFC pour ses Message Maps).
    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
    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 EnigmuS
    Merci,

    Donc en gros pour stage c'est un peu la caca lol vu que les Dll appelées ont un nombre different de paramatres et sont de type variable (je connais par contre statiquement via des fichiers les E/S d'une DLL que ce soit le type,le nombre de paramétres...)

    La meilleure solution est donc celle déjà implenté ? (une dll interface pour une dll)

    <...>
    Je suis désolé de te dire que tu parles beaucoup mais de choses que tu ne maitrises pas. C'est donc totalement incompréhensible.

    Est-ce que tu sais ce qu'est une DLL ?
    Est-ce que "appeler une DLL" a un sens pour toi ? Pour moi, il n'en a pas.

    Essaye de poser le problème simplement en expliquant calmement l'existant, et le problème à résoudre. Tu donnes l'impression de ne pas avoir compris le problème. En ce qui me concerne, c'est sûr, je n'ai rien compris.

    Et je parle bien du problème, et non des éventuelles solutions.Il n'y a pas de solution à un problème mal exposé.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    Désolé pour l'énoncé peu clair je reprend :

    Un ensemble de .INI décrivent des tests fonctionnels.

    Ce logiciel s’appuie sur les DLLs de communication produit développées en amont pour les divers tests de production, notamment lors des tests Fonctionnels.

    Les DLLs de communication produit sont décrit dans un des fichiers INI, et une DLL interface, dont les fonctions ont toutes le même prototype, est développée à chaque produit.

    Le chargement dynamique de la DLL interface permet alors la communication avec le produit.

    Les DLLs de communication développées en VisualC++ respectent aujourd’hui un formalisme définit, limitant le nombre de types de données possibles (chaine de caractères, entier, flottant, et tableaux)

    Et moi je dois mettre au point un chargement dynamique de la DLL de
    communication à partir d’un fichier de description des fonctions de la DLL.

    Mais le probleme est que lorsqu on appel une DLL on la charge et pour appeler la fonction désirée on y affecte un pointeur sur fonction qui nécessite une signature statique or si je m'affranchie des DLL interfaces comment construire la signature du pointeur et l'appel correspondant juste en lisant dans un fichier .INI.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Comme je l'ai dit, tu ne peux.

    Il est impossible de construire directement la liste de paramètres d'une fonction en C. Les bibliothèques qui font ce genre de choses le font en assembleur, ou commencent par générer un stub qui lui-même nécessite de l'assembleur ou une compilation dynamique.
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    Mes connaissances en assembleur se limite à l'ARM7 lol

    En tout cas si c'est la seule solution il va bien falloir que je l'implémente, y a-t-il des tutoriaux sur le sujet parce que meme en admettant que je comprenne le principe je suis pas sur d'arriver à le coder en assembleur arf

  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 EnigmuS
    Désolé pour l'énoncé peu clair je reprend :

    Un ensemble de .INI décrivent des tests fonctionnels.
    C'est à dire ? Ce sont des commandes, des paramètres ? On est pas devins...
    Ce logiciel s’appuie sur les DLLs de communication produit développées en amont pour les divers tests de production, notamment lors des tests Fonctionnels.
    C'est à dire ? Les commandes vont appeler des fonctions de ces DLL ? Tu ne peux pas expliquer les choses simplement, directement ? Mets toi à notre place. On ne sait absolument pas de quoi tu parles, on ne voit rien, on n'est pas dans ton univers...
    Les DLLs de communication produit
    Aucun sens détecté.
    sont décrit dans un des fichiers INI, et une DLL interface, dont les fonctions ont toutes le même prototype, est développée à chaque produit.
    N'a aucun sens. Des fonctions différentes ne peuvent pas avoir le même prototype. Le nom est forcément différent. Par contre, elles peuvent avoir le même profil, c'est à dire le même nombre et type de paramètres et le même type retour. Un classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int f (int n, char **as)
    Le chargement dynamique de la DLL interface permet alors la communication avec le produit.
    C'est quoi le produit ? Le logiciel à tester ?
    Les DLLs de communication développées en VisualC++ respectent aujourd’hui un formalisme définit, limitant le nombre de types de données possibles (chaine de caractères, entier, flottant, et tableaux)
    L'interface des fonctions de la DLL est donc connue.
    Et moi je dois mettre au point un chargement dynamique de la DLL de
    communication à partir d’un fichier de description des fonctions de la DLL.
    Le chargement d'une DLL se fait à la demande par une fonction système bien spécifique. Ensuite, il faut définir des pointeurs de fonction et les initialiser en allant chercher l'adresse<des fonctions avec une autre fonction système dont j'ai oublié les noms...

    Exemple pour la DLL bien connue "inpout32.dll" :

    http://delahaye.emmanuel.free.fr/clib/pio/

    Mais le probleme est que lorsqu on appel une DLL
    Aucun sens. On appelle une fonction, pas une DLL. On charge une DLL. Il faut être précis avec le vocabulaire, sinon, on ne se fait pas comprendre et on passe pour un clown.
    on la charge et pour appeler la fonction désirée on y affecte un pointeur sur fonction
    Ah, tu commences à montrer que tu sais de quoi tu parles. Il était temps !
    qui nécessite une signature statique
    Qu'est-ce qu'une "signature statique" ? Je connais 'prototype'. C'est de ça que tu parles ?
    or si je m'affranchie des DLL interfaces
    C'est quoi ces DLL interfaces ? A quoi ça sert et pourquoi veux-tu les supprimer ?
    comment construire la signature du pointeur et l'appel correspondant juste en lisant dans un fichier .INI.
    Tu veux faire du dynamique de dynamique ? Je crois que tu en demandes un peu trop.

    Je crois que je commence à comprendre. Les DLL interfaces sont là justement pour 'normaliser' les interfaces des fonctions des DLL de communication qui peuvent être diverses. Pour une raison que j'ignore, tu veux supprimer ces interfaces et les remplacer par une génération d'appel dynamique crée à l'exécution à partir de données contenu dans un fichier de commande. C'est de la haute voltige et le résultat ne sera absolument pas portable.

    Qu'est-ce qui ne va pas avec les DLL d'interfaces ? Pour moi, c'était plutôt de la bonne conception, 100% dynamique, donc extrêmement souple et programmable par fichier de commande.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Emmanuel, tu as loupé pas mal de choses (EDIT) mais ton dernier paragraphe résume bien.

    Le sujet a été clarifié depuis, notamment dans mes derniers posts.
    Y compris la raison de cette tentative de changement de méthode.
    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.

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Médinoc
    On ne peut pas construire dynamiquement un appel de fonction sans jouer avec de l'assembleur.
    Quelqu'un aurait un lien avec plus d'info sur ce point ???


    Je m'explique : ce sujet m'intéresse car j'ai un problème similaire : Je voudrais pouvoir appeler des fonctions en ne connaissant leurs prototypes (nom, type de retour et nombre/type des paramètres) qu'à l'exécution. Seulement dans mon cas il m'est impossible de générer automatique une DLL d'interface...


    J'ai bien compris que c'est impossible à faire en C, mais si quelqu'un a des infos et/ou un lien sur la faisabilité de la chose en assembleur cela m'intéresserait fortement


    a++

  10. #10
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Quelqu'un aurait un lien avec plus d'info sur ce point ???


    Je m'explique : ce sujet m'intéresse car j'ai un problème similaire : Je voudrais pouvoir appeler des fonctions en ne connaissant leurs prototypes (nom, type de retour et nombre/type des paramètres) qu'à l'exécution. Seulement dans mon cas il m'est impossible de générer automatique une DLL d'interface...


    J'ai bien compris que c'est impossible à faire en C, mais si quelqu'un a des infos et/ou un lien sur la faisabilité de la chose en assembleur cela m'intéresserait fortement
    a++
    On parle d'un sujet similaire dans le forum assembleur justement :

    http://www.developpez.net/forums/sho...d.php?t=310206

    Je peux donner de plus amples explications, même si comme le disait Emmanuel et Médinoc, c'est clairement de la bidouille (main dans le camboui et compagnie )

    (off topic) Médinoc, rôliste ? (allusion au démon de Nog )

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Neitsa
    Je peux donner de plus amples explications, même si comme le disait Emmanuel et Médinoc, c'est clairement de la bidouille (main dans le camboui et compagnie )
    Je vais quand même y jeter un petit coup d'oeil


  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    Merci beaucoup pour le post c'est pile ce qu'il me faut aussi j'ai en gros le meme probleme que lui avec ses DLL

    et merci encore à tous le monde au pire si je m'en sors pas avec l'assembleur j'essayerai de faire la génération de la DLL interface comme conseillé encore merci.

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

Discussions similaires

  1. [Débutant] Détourner un appel de fonction DLL dynamique
    Par let_me_in dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 28/05/2007, 23h02
  2. Réponses: 8
    Dernier message: 22/12/2004, 22h57
  3. DLL classique - appel de DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 8
    Dernier message: 12/07/2004, 14h34
  4. Appels fonctions DLL
    Par Micka91 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 17/02/2004, 17h32
  5. [VB6] [Langage] VB6 et les appels de dll
    Par Dave63 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/01/2003, 18h20

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