La fonction d'exportation de DLL dans Visual Studio 2010 à l'aide de DEF
J'ai hérité d'un énorme C++ multi-projet de solution avec de nombreuses bibliothèques dynamiques mais sans
__declspec(dllexport)
Je appris que l'on n'a pas nécessairement pour insérer une dllexport (ce serait beaucoup de travail), mais que l'on peut utiliser un .def fichier en plus de correspondant .dll à la place.
Afin d'essayer ce que j'ai construit une "DLL" Hello World" projet de ici, enlevé le dllexport de l'en-tête et...a échoué désespérément. Dans les paroles de déjà cité page, mon question clé est de savoir comment
"[..] use the .def file when building the DLL."
Mon .def fichier (j'ai essayer le code qu'avec le Ajouter méthode):
LIBRARY MathFuncsDll
EXPORTS
?Add@MyMathFuncs@MathFuncs@@SANNN@Z
Comment puis-je l'utiliser lors de la construction de la DLL dans Visual Studio 2010 pour l'exportation d'un Ajouter méthode?
Add
fonction?static double Add(double a, double b);
, placé comme public
dans la classe MyMathFuncs
de l'espace de noms MathFuncs
Êtes-vous de l'exportation de la classe? Voir stackoverflow.com/questions/186232/...
Non, je n'en ai pas mais merci pour l'astuce en tout cas.
Win32
GetWindowText()
est un exemple de "pure interface C" de la fonction exportée à partir d'une DLL. Vous utilisez extern "C"
, vous n'utilisez pas d'objets C++ au niveau de l'interface, vous ne jetez pas les exceptions C++ en dehors de la fonction, etc. (La mise en œuvre peut être en C++, mais l'interface est de la pure C.), Mais il semble que vous voulez exporter une classe C++ méthode (statique)...
OriginalL'auteur Finnfalter | 2013-01-18
Vous devez vous connecter pour publier un commentaire.
Après avoir passé une demi-journée en face de ce problème, je viens de trouver la solution: il est décrit ici.
Pour reprendre le processus de symbole à l'exportation avec .def fichiers dans VS2010 en utilisant mes propres mots:
Si Vous avez d'autres questions concernant .def fichiers, regarder dehors pour le terminus "fichier de définition de Module".
Dans mon cas, j'ai été réticents à ajouter dllexport dans des centaines de fichiers de code. En particulier parce qu'il peut changer dans le futur (pas mes modifications). Ce code est développé pour MinGW, en fait. Mon j'espère pour automatiser les exportations sans aucune modification de code.
Qui conduit naturellement à la prochaine question évidente: Comment déterminer 'mutilé' des noms comme
?Add@MyMathFuncs@MathFuncs@@SANNN@Z
pour arbitraire de classes et de méthodes? Dans mon cas précis, j'ai triché: j'ai créé un .dll avec dllexport tout d'abord, extrait le symbole, puis conçu .def avec extrait symbole et, enfin, supprimé dllexport de nouveau. Comment un mutilé nom déterminé dans un cas général?À droite, vous l'avez terminée en arrière. dllexport assure que la déformation nom est correct, même après les modifications. Vous pouvez utiliser une carte.
OriginalL'auteur Finnfalter