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

Qt Creator Discussion :

Problème de chargement de DLL (MSVFW32.DLL)


Sujet :

Qt Creator

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 67
    Points : 63
    Points
    63
    Par défaut Problème de chargement de DLL (MSVFW32.DLL)
    Hello à tous...

    Un projet que je développe en ce moment utilise la librairie VFW pour créer des AVIs.

    Donc #include <vfw.h> dans les sources
    et LIBS += chemin qui va bien /vfw32.lib dans le .pro

    Si la configuration de compilation est MSVC2008, quel que soit l'EDI (QtCreator ou MSVC), tout va bien... Ca compile, ca linke, la DLL MSVFW32.DLL est bien chargée à l'exécution...

    Si la configuration de compilation est MinGW, sous QtCreator, ca compile, ca linke, mais la DLL n'est pas chargée à l'exécution et donc ca plante (SEGV) à l'exécution de toute fonction de la DLL (VideoForWindowsVersion() par exemple).

    Auriez-vous une idée?

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 67
    Points : 63
    Points
    63
    Par défaut
    Bon... Y'a vraiment trop de réponses à ma question...

    Je ne sais toujours pas pourquoi ces DLLs (MSVFW32.DLL et AVIFIL32.DLL) ne se chargent pas automatiquement au démarrage de l'appli. Cependant, impératif temps oblige, j'ai apporté une solution à mon problème en utilisant QLibrary.

    Pour garder la compatibilité avec les deux comilateurs (CL de MSVC et MINGW)
    j'utilise un #define en tête de mon code...

    Et donc dans mon .h je retrouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #ifdef QTCREATOR
        QLibrary *Vfw;
        QLibrary *Avi;
         ulong (*VideoForWindowsVersion)();
         ULONG (*AVIStreamRelease)(PAVISTREAM) ;
         ULONG (*AVIFileRelease)(PAVIFILE);
         void (*AVIFileInit)();
         void (*AVIFileExit)();
         HRESULT (*AVIFileOpenW)(PAVIFILE*,LPCWSTR,UINT,LPCLSID);
         HRESULT (*AVIStreamWrite)(PAVISTREAM,LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*);
         HRESULT (*AVIFileCreateStream)(PAVIFILE,PAVISTREAM*,AVISTREAMINFOW*);
         BOOL (*AVISaveOptions)(HWND,UINT,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*);
         HRESULT (*AVIMakeCompressedStream)(PAVISTREAM*,PAVISTREAM,AVICOMPRESSOPTIONS*,CLSID*);
         HRESULT (*AVIStreamSetFormat)(PAVISTREAM,LONG,LPVOID,LONG);
    #endif
    avec dans le cpp, un constructeur qui contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    CAVIFile::CAVIFile()
    {
    #ifdef QTCREATOR
        Vfw = new QLibrary("c:/Windows/SysWOW64/msvfw32.dll");  // A adapter
        Vfw->load();
        Avi = new QLibrary("c:/Windows/SysWOW64/avifil32.dll");     // Idem...
        Avi->load();
        VideoForWindowsVersion  = (ulong(*)()) Vfw->resolve("VideoForWindowsVersion");
        AVIStreamRelease          =(ULONG(*)(PAVISTREAM)) Avi->resolve("AVIStreamRelease");
        AVIFileInit             =(void(*)()) Avi->resolve("AVIFileInit");
        AVIFileRelease            =(ULONG(*)(PAVIFILE)) Avi->resolve("AVIFileRelease");
        AVIFileExit             =(void(*)()) Avi->resolve("AVIFileExit");
        AVIFileOpenW            =(HRESULT (*)(PAVIFILE*,LPCWSTR,UINT,LPCLSID)) Avi->resolve("AVIFileOpenW");
        AVIStreamWrite          =(HRESULT (*)(PAVISTREAM,LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*))Avi->resolve("AVIStreamWrite");
        AVIFileCreateStream     =(HRESULT (*)(PAVIFILE,PAVISTREAM*,AVISTREAMINFOW*))Avi->resolve("AVIFileCreateStreamW");
        AVISaveOptions          =(BOOL (*)(HWND,UINT,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*))Avi->resolve("AVISaveOptions");
        AVIMakeCompressedStream =(HRESULT (*)(PAVISTREAM*,PAVISTREAM,AVICOMPRESSOPTIONS*,CLSID*))Avi->resolve("AVIMakeCompressedStream");
        AVIStreamSetFormat      =(HRESULT (*)(PAVISTREAM,LONG,LPVOID,LONG))Avi->resolve("AVIStreamSetFormat");
    #endif
    }
    dès lors, il n'y a plus de différence entre les deux versions qui utilisent soit les pointeurs de fonctions (MINGW) soit les fonctions elles-mêmes (MSVC)...


    Ceci ne répond pas à la question posée, mais résout mon problème...
    Je ne ferme pas ce sujet tout de suite...
    J'attends vos éventuelles réactions...

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Points : 2 627
    Points
    2 627
    Par défaut
    Citation Envoyé par deebou Voir le message
    Si la configuration de compilation est MinGW, sous QtCreator, ca compile, ca linke, mais la DLL n'est pas chargée à l'exécution et donc ca plante (SEGV) à l'exécution de toute fonction de la DLL (VideoForWindowsVersion() par exemple).

    Auriez-vous une idée?
    Salut,

    je n'ai quasiment jamais bossé avec MinGW et encore moins avec QtCreator.
    Vu que tu es sous Windows et que tu as un souci de dépendances, que dit notre indispensable depends ?

Discussions similaires

  1. Probléme de chargement d'un fichier DLL dans visual studio
    Par youssef_rjili dans le forum Visual Studio
    Réponses: 10
    Dernier message: 29/09/2011, 18h19
  2. [JNI] Encore un problème de chargement de dll
    Par seiryujay dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 10/08/2006, 14h23
  3. [Win32]Problème au chargement d'une DLL C++
    Par FamiDoo dans le forum MFC
    Réponses: 22
    Dernier message: 05/07/2006, 12h10
  4. [VB] Problème de chargement d'une DLL
    Par Elijha dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 10h24
  5. problème de chargement dll
    Par tophque dans le forum MFC
    Réponses: 8
    Dernier message: 18/11/2005, 16h14

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