Décorations des fonctions

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 14 déc. 2004 à 16:23
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 14 déc. 2004 à 23:51
Bonjour,

J'utilise MSVC et MinGW pour compiler des DLLs. Avec MinGW, je supprime les décorations grâce à une option du compilateur (ce qui m'épargne la maintenance fastidieuse d'un fichier .def), mais je n'ai pas retrouvé cette option dans MSVC... Existe-t'elle et si oui, quelle est-elle ?

Actuellement je demande à MinGW de générer le fichier .def après la compilation de la DLL et je l'utilise pour la recompiler avec MSVC, mais je trouve cette solution moyennement satisfaisante...

Merci d'avance.

8 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 déc. 2004 à 20:58
Ajoute extern "C" avant le nom de tes fonctions, ca indiquera au compilateur de générer des décorations sur le nom de tes fonctions.

Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 déc. 2004 à 20:59
Erreur je viens de me relire.

Le extern "C" indique au compilateur de ne pas générer de décorations.
Tu as juste à l'ajouter avant le nom de tes fonctions dans ta DLL.

Shell
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
14 déc. 2004 à 22:21
Je compile en mode C (/TC), avec le extern "C" il me sort une error C2059: syntax error : 'string'
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 déc. 2004 à 22:35
Normal, la directive extern "C" {...} est spécifique au C++.
Essaye ca :

#if defined(_cplusplus)
#extern "C" {
#endif
int MyFunc1(int Param1);
int MyFunc1(int Param1);
// tu listes tes autres fonctions présentent dans le .c
#if defined(_cplusplus)
}
#endif


Shell
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
14 déc. 2004 à 22:43
Moui je vois le principe, mais çà ne changera rien aux décorations de mes fonctions : toute la DLL est compilée en mode C (donc _cplusplus ne sera pas définie), et les exports sont de la forme _fonction@n ou fonction est une fonction et n la taille de ses arguments...

Par contre c'est bon à savoir pour être compatible avec C++, merci.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 déc. 2004 à 22:57
Oui en effet.
Ce que tu peux faire, c'est de compilé ta DLL en mode C++ en ajoutant la directive extern "C".
Les programmes ainsi codé en C, pourront acceder aux fonctions de la DLL.

Sinon vaudrait voire avec BruNews s'il existe un moyen de désactiver les décorations des options du compiler.

Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 déc. 2004 à 23:19
Je suis tombé sur quelques article qui mentionne que l'utilisation du .def en l'incluant a ton workspace, te permet de ne pas avoir a utiliser les décorations.
Si tu dois modifier le nombre et le type de tes params, il te faudra alors aussi modifier le .def.

Essaye de voir sur google, il y a quelque thread qui traite de ca.

Shell
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
14 déc. 2004 à 23:51
Ben j'ai passé la soirée à éplucher soigneusement chaque switch de cl.exe et link.exe, aucun ne mentionne cette option fantôme (par contre; y'en a des forts intéressantes - surtout pour l'optimisation du code).

Tant pis, je continuerais à générer le .def à partir de la sortie de GCC. Merci quand même !
0
Rejoignez-nous