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...
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
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.
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.
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.
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 !