2011-06-22 2 views
3

J'ai obtenu un pointeur de fonction au moment de l'exécution, disons quelque chose comme GetProcAddress (donc un void faiblement typé *), et j'ai cette métadonnée qui me dit ce que la signature de la fonction est en cours d'exécution. Comment puis-je appeler la fonction correctement, de préférence en code standard? La solution C++ 0x est très bien, et cela ne me dérange pas d'avoir à appliquer ma propre sécurité.Appel d'un pointeur de fonction avec des arguments dynamiques

+0

Je sais semble redudant, mais, c'est la fonction de destination dans un objet partagé/bibliothèque dynamique, ou c'est le même programme? – umlcat

+0

@umlcat: Aucune idée. – Puppy

Répondre

1

Euh ... non, vous ne pouvez pas. Il n'y a rien comme la réflexion est C++ ou C++ 0x, vous ne pouvez pas obtenir un type d'une chaîne ou autre. Malheureusement :)

+1

Toutefois, s'il existe des limites aux signatures de fonctions, et qu'il connaît les possibilités spécifiques, n'a-t-il pas pu analyser les métadonnées et convertir le pointeur de fonction en une fonction spécifique (éventuellement surchargée) basée sur cela? – JAB

+1

@JAB: Je devrais générer toutes les surcharges possibles avant, ce qui pourrait être des millions de permutations ou plus. – Puppy

+0

Il est possible de faire - c'est ce que fait Excel quand il appelle XLLs. Mais vous devrez peut-être recourir à un assembleur pour le faire. – DangerMouse

Questions connexes