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

Windows Discussion :

Récuperer la version d'une dll (celle dans ressources.rc)


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Récuperer la version d'une dll (celle dans ressources.rc)
    Bonjour,

    Dans une appli C++, je fais appel à une DLL écrite en C++.
    C'est le numéro de version de la DLL (FILEVERSION) qui se trouve dans ressources.rc que je cherche a recuperer.

    Quelqu'un aurait-il une idee?
    Merci par avance!

    Regeaisse.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    C'est spécifique Windows, je déplace.
    La référence ici:
    http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/versioninformation.asp
    Un exemple là:
    http://www.codeproject.com/dll/showver.asp

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut pb de localisation de la dll
    J'ai redige ce code pour recuperer la version de la dll

    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
    if ( GetModuleFileName( NULL, strExeName, _MAX_PATH ) )
    {
        DWORD dummy;
        DWORD size = GetFileVersionInfoSize/*W*/( strExeName, &dummy ) ;
        if (size)
        {
            void* pVer = _alloca(size);
            memset(pVer, 0, size);
            if ( GetFileVersionInfo/*W*/( strExeName, 0, size, pVer ) )
            {
                // Interpret the VS_VERSIONINFO header pseudo-struct
                VS_VERSIONINFO_98 * pVS = (VS_VERSIONINFO_98 *)pVer;
            }
        }
    }
    J'ai un probleme avec le GetModuleFileName car il me retourne le nom du module C++ utilisant la dll dont je cherche la version.

    J'ai donc essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HMODULE h = ::GetModuleHandle("NomDLL.dll");
    HRSRC hres = FindResource(h, "VS_VERSION_INFO", RT_VERSION);
    if (hres)
    {
        DWORD    size = SizeofResource( hInst, hres );
        HGLOBAL  hmem = LoadResource(h, hres);
        char *lpResLock = (char *)LockResource(hmem);
       ........
    }
    Mais le FindRessource ne fonctionne pas.

    Qu'est ce qui ne va pas dans ce que je fais?

    Merci par avance.

    Regeaisse
    [Balises [code] ajoutées par Aurélien.Regat-Barrel, merci d'y penser]

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut


    Pour récupérer la version d'une DLL au sein d'elle-même, j'enchaîne les appels suivants :
    - GetModuleFileName, avec le HINSTANCE passé à DllEntryPoint en paramètre.
    - GetFileVersionInfoSize / GetFileVersionInfo
    - VerQueryValue sur "\VarFileInfo\Translation", histoire d'obtenir la bonne version en fonction de la langue (sinon, effets de bord "mignons" en cas de changement de la langue de base !!).
    - Puis des appels à la chaîne à VerQueryValue sur "\StringFileInfo\" + la représentation texte du code numérique obtenu à l'étape précédente + "\" + le nom du champ à récupérer, donc "ProductVersion" dans ton cas.

    Détail des commandes sur MSDN.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    J'ai un probleme avec le GetModuleFileName car il me retourne le nom du module C++ utilisant la dll dont je cherche la version.
    c'est parce que tu as donné NULL en premier paramètre. Faut donner le handle de la dll ( GetModuleHandle("NomDLL.dll") par exemple, encore que si tu as le nom, autant l'utiliser directement non ?)

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    J'ai utilise le GetModuleHandle("NomDLL.dll") comme suggere par Aurelien.Regat-Barrel, car je ne connais pas le nom complet (chemin compris) de la Dll.

    Ensuite grace au handle recupere je peux utilise la sequence d'appels suggeree par Mac LAK.

    Ca fonctionne!
    Merci de votre aide!

    Regeaisse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/02/2010, 17h26
  2. Réponses: 3
    Dernier message: 24/11/2006, 11h12
  3. [Langage]Comment utiliser une dll .NET dans VB6?
    Par BouB dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/04/2006, 14h20
  4. [inno setup/is tool] Version d'une dll.
    Par méphistopheles dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 21/02/2006, 22h25

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