C++ Name Mangling

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 18 avril 2010 à 15:56
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 6 mai 2010 à 13:12
Salut, pour les fonctions j'arrive à éviter la décoration C++ du nom avec extern "C" mais est-ce possible de l'éviter pour les méthodes d'une classe ? merci.

par exemple :

?GetVideoWindow@MediaPlayer@@QEAAJPEAPEAUHWND__@@@Z

deviendrait :

GetVideoWindow

2 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
1 mai 2010 à 20:16
Salut,

A mon avis c'est tout à fait mort d'essayer de ne pas avoir de décoration sur une méthode C++. Comment serait par exemple géré la surcharge (2 méthodes de même noms mais avec paramètres différents) ? Ou comment gérer le cas de deux classes exposant une méthode avec le même nom ?

Bon après, on peut toujours bidouiller. Par exemple, rien n'empêche de faire une petite retouche sur la table d'export !
On peut aussi bidouiller une fonction C exportée qui renvoie un tableau de pointeur sur les méthodes.
Bref, on peut faire beaucoup de choses très sales...

Mais avant tout, il y a quand même un gros problème : Une méthode (Non statique) prend en premier argument caché un pointeur sur l'objet... Et un objet C++, ça peut avoir une représentation en mémoire particulièrement compliqué et surtout qui dépend du compilo. Et je ne parles pas des allocations et constructeurs destructeurs...

Bref, exporter des fonctions et/ou méthodes C++, c'est mal. En général, ceux qui font des dlls en C++ ajoutent une couche C par dessus et exporte ça (Exemple : ODE).
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 mai 2010 à 13:12
Merci pour la réponse c'est très intéressant.. je pense simplement rajouter une interface C.
0
Rejoignez-nous