2010-10-13 5 views
2

J'ai construit une DLL et maintenant je veux utiliser cette DLL dans un projet Microsoft Visual Studio.Utilisation de la DLL intégrée à MinGW dans un projet Visual Studio 2010 C++

g++ -O0 -Wall -c -fmessage-length=0 -osrc\MyLib.o ..\src\MyLib.cpp 
g++ -shared -Wl,--out-implib=MyLib.lib -Wl,--output-def=MyLib.def -oMyLib.dll src\MyLib.o -lwsock32 

La DLL fonctionne correctement lorsque je l'utilise dans un "projet gcc".

J'ai essayé différentes méthodes pour créer les fichiers ".lib" et ".def" et j'ai essayé d'importer ces bibliothèques dans VS en suivant différents tutoriels. Mais VS ne trouve pas les méthodes déclarées dans la dll ...

Je suis reconnaissant pour toute aide.

Répondre

3

Avez-vous entendu parler de mangling de nom? A moins que les fonctions exportées de DLL ne soient marquées comme extern "C", leurs noms seront tronqués d'une manière spécifique au compilateur. Ainsi le problème.

+2

Et pour aggraver le problème, il ne s'agit pas seulement du nom mangling, mais d'autres choses comme la gestion des exceptions ou la mise en page de la mémoire objet sont incompatibles. Et ceci n'est pas limité à des compilateurs différents, des versions différentes d'un compilateur, ou des invocations de compilateur avec des options différentes peuvent être incompatibles entre elles. – Rudi

+1

@Rudi: +1. Sans parler des différentes implémentations de la bibliothèque standard. –

1

Si vous voulez que votre dll à utiliser avec un autre compilateur que vous avez les options suivantes:

  1. qu'exposer "C" interface (avec extern "C") - pas de cours ou anyting C++ spécifique.
  2. Créer une DLL COM.
  3. Faites de votre modèle COM semblable à les mêmes contraintes.
+0

Je pense que les classes abstraites pures sont également indépendantes du compilateur (dans une certaine mesure au moins). –

+0

@Pedro: C'est ce que je voulais dire par l'option 3) bien que ce soit un peu plus compliqué que de simplement utiliser des classes abstraites. –

+0

GCC et MSVC peuvent tous deux être utilisés pour créer des DLL COM - qui est une interface binaire basée sur des implémentations conformes de fonctions virtuelles. Il devrait être possible de transmettre des classes virtuelles pures entre MSVC et GCC en toute sécurité (à nouveau, en supposant que les types de paramètres sont POD ou des classes virtuelles pures) –

0

Pour le bénéfice d'autrui. Jetez un oeil à MinGW: Mixing Compilers et Binary Compatible C++ Interfaces. Il est clair d'après ce qui précède qu'il n'y a aucun moyen direct d'interfacer une DLL C++ construite avec MinGW avec MS Visual Studio. Cet interfaçage "fonctionne" uniquement via l'interface basée sur C.

Questions connexes