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 fonction via dlsym


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Par défaut Appel de fonction via dlsym
    Bonjour,

    Je tente de lancer depuis un code une fonction se trouvant dans une librairie. Pour ce faire, j'utilise dlopen et dlsym :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (!((lib = dlopen(data.lib.c_str(), RTLD_LAZY)))){
    	printf("Error dlopen\n");
    	exit(EXIT_FAILURE);
    }
     
    if (!(funct = (void (*)()) dlsym(lib, data.func.c_str()))) {
    	dlclose(lib);
    	printf("Error dlsym\n");
    	exit(EXIT_FAILURE);
    }
     
    funct(data.arg);
    Les chaines de caractères sont contenues dans des variables car je veux lancer n'importe quelle fonction, mais qui ne prendrait toujours qu'un argument (une structure qui peut varier d'une fonction à une autre).

    A la compilation j'ai une erreur à l'appel de funct :
    manager.cpp:428: error: too many arguments to function

    J'ai fait un programme test où je passe le nom de la librairie et de la fonction en dur et ça fonctionne bien. Savez-vous pourquoi cela ne marche plus et comment remédier au problème svp ?

    Merci !!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 467
    Par défaut
    Ce serait bien qu'on voie la ligne 428 et la déclaration de « funct » mais, à vue de nez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    funct = (void (*)())
     
    funct(data.arg);
    « funct » a l'air d'être un pointeur sur une fonction de type « void f() », donc sans paramètre, et tu l'appelles avec un paramètre : « data.arg ». Donc le compilo se plaint (si c'est bien cette ligne qui est concernée).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Par défaut
    Merci pour ton aide, j'ai pu trouver l'erreur :-)

    Il suffisait de remplacer

    par

    Bonne soirée !!

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

Discussions similaires

  1. appel de fonction via une variable
    Par rapido666 dans le forum Web
    Réponses: 5
    Dernier message: 25/04/2014, 11h08
  2. [DOM] appeler une fonction via son nom (qui est une string)
    Par elekis dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/07/2008, 13h06
  3. Appel fonction via un string
    Par Veovis dans le forum C++
    Réponses: 17
    Dernier message: 06/02/2007, 09h45
  4. Appeler une fonction Access via un .bat
    Par kluh dans le forum Access
    Réponses: 12
    Dernier message: 27/11/2005, 23h41
  5. Réponses: 8
    Dernier message: 13/08/2004, 12h32

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