2009-12-16 3 views
1

J'ai une application c qui devrait charger un objet partagé à l'exécution et appeler une fonction arbitraire de l'objet partagé. L'objet partagé a été construit par l'utilisateur et m'a donné la signature de sa fonction.passage de paramètre à une fonction d'objet partagé

int func(int a, int b, double c) 

i utiliser dlopen pour charger l'objet et dlsym pour obtenir un pointeur de fonction à la fonction d'objet partagé. Maintenant, je dois passer le paramètre à la fonction. Je ne suis pas la signature au moment de la compilation. Quel est le meilleur moyen de le faire? Y at-il une chance de vérifier la signature avant d'appeler la fonction dans mon application?

Répondre

2

Veuillez regarder le C/C++ function pointer tutorial. Il devrait répondre à toutes vos questions. En ce qui concerne la vérification à l'exécution: Non, vous ne pouvez pas vérifier la signature pour l'ajustement car C ne prend pas en charge reflection. dlsym() ne renvoie généralement pas un pointeur de fonction correct mais un (void *) que vous devez lancer. Utiliser des fonctions partagées arbitraires dont vous ne connaissez pas la signature est un signe de mauvaise conception. Mon conseil serait de repenser l'architecture.

Questions connexes