Précédent   Forum du club des développeurs et IT Pro > C et C++ > Outils pour C & C++ > Visual C++
Visual C++ Forum d'entraide sur Microsoft Visual C++. Avant de poster -> F.A.Q Visual C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 17h52   #1
kouillo
Invité de passage
 
Inscription : janvier 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 11
Points : 1
Points : 1
Par défaut Utilisation d'une DLL Visual Studio avec MinGW

Bonjour à tous.

Je suis face un problème pour un projet qui devrait se dérouler en C++ Qt. Je désirerai donc compiler mon programme avec gcc de mingw.

Je dois communiquer avec un appareil par l'intermédiaire d'un SDK fourni sous la forme d'une dll + des headers + des .lib pour l'inclusion.
Ces librairies sont prévues à la base pour une utilisation avec le compilateur de VisualStudio. Le fournisseur m'indique qu'ils n'ont jamais eu de demande pour compiler avec MinGW.
Cependant ils fournissent aussi leur SDK en version Linux.

Ma problématique serait de faire accepter les librairies par gcc.
J'inclus pour le moment les fichiers lib dans le projet Qt :
LIBS += -L../librairies
LIBS += -lNomLibrairie
Je n'ai pas d'erreur mais je ne suis pas totalement sur que l'inclusion se fasse réellement.

Mon projet ne comporte qu'une instance d'un objet de la librairie, mais j’obtiens le message d'erreur suivant lors de l'instanciation :
erreur : undefined reference to `_imp___ZN15C_NomDeLaClasseC1Ev'

A quoi est du ce type d'erreur ? un problème d'inclusion ?

Faut il recompiler les librairies ?

Il me semblait être tombé sur une FAQ ou une aide montrant une technique pour recompiler des .lib issus de VS pour GCC, mais je n'arrive pas à retrouver le lien.
Je suis tombé sur DLLtool mais rien n'y fait.

Désolé si j'ai des questions à la con, j'ai quelques lacunes en inclusions de librairies

D'avance merci.
kouillo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2012, 10h49   #2
allchimiste
Invité régulier
 
Homme Thomas Desaintjean
Développeur informatique
Inscription : juillet 2012
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Thomas Desaintjean
Âge : 23
Localisation : France, Ardèche (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : juillet 2012
Messages : 6
Points : 5
Points : 5
Je ne sais pas si il est trop tard ou non, mais la dll que tu utilise as été compilée en C++ je pense.

Lorsque le compilateur passe par la, il fait une "décoration" des noms de fonction, pour bien distingué d'éventuels conflit entre deux fonctions du même nom. La décoration permet d'avoir des noms unique, en rajoutant des symboles et des lettres autour du nom original.

Pour pouvoir appeler cette fonction, il faut soit forcer le compilateur a compiler en C (et non en C++) soit ajouter des mot clés avant le nom de ta fonction pour que le compilateur comprenne que cette fonction doit être compiler en C et non en C++

Personnellement j'ai crée une dll avec visual studio C++ 2010 express et j'ai fait :

Code :
extern "C" __declspec (dllexport) TypeFonction __cdecl NomFonction(Argument1, Argument2, ..)
Pour chacune des fonctions que je voulais pouvoir utiliser a l’extérieur de la dll. J'ai crée cette dll avec Visual Studio C++ 2010 Express et l'utilise avec Qt Creator 2.5.0, Qt 4.8.2, et je compile avec Mingw 32 bits.

J'espère que ça aidera quelqu'un a défaut du créateur du fil.

MAJ : J'avais oublier que la dll c'est pas toi qui l'a faite .. Si tu n'a pas la possibilité de recompiler cette dll en rajoutant ces mots clés, la seule solution c'est de compiler avec le même compilateur que celui de la dll, et encore je suis pas certain que la décoration soit interprétée correctement.
allchimiste est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h51.


 
 
 
 
Partenaires

Hébergement Web