IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Utilisation d'une DLL Visual Studio avec MinGW


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    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.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Jura (Franche Comté)

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 29
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. [PHP 5.2] Utilisation d'une DLL sous PHP avec objet COM
    Par Bqda dans le forum Langage
    Réponses: 5
    Dernier message: 08/06/2009, 16h05
  2. Utiliser une DLL en Delphi avec Visual Basic
    Par jix69 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 25/11/2008, 02h32
  3. Utilisation d'une dll (visual 6.0) à partir de visual 2005
    Par WELCOMSMAIL dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 10/03/2008, 08h37
  4. [VC++] Utilisation d'une DLL écrite en C++ avec mingw.
    Par swirtel dans le forum Visual C++
    Réponses: 1
    Dernier message: 20/06/2007, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo