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

MFC Discussion :

[MFC] Recupérer le numéro de version de mon activeX


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut [MFC] Recupérer le numéro de version de mon activeX
    Bonjour à tous !

    Dans mon activeX, je souhaite avoir une fonction qui me renvoi son numéro de version, le FILEVERSION ou PRODUCTVERSION dans VS_VERSION_INFO
    Pour cela, j'ai fait la méthode suivante :
    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
    STDMETHODIMP CTransfer::get_activexVersion(BSTR* pVal)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
    	DWORD dwMajorVersion =  (DWORD)(LOBYTE(LOWORD(VS_VERSION_INFO)));
    	DWORD dwMinorVersion =  (DWORD)(HIBYTE(LOWORD(VS_VERSION_INFO)));             
    	DWORD dwBuild = (DWORD)(HIWORD(VS_VERSION_INFO));
    	DWORD dwLast = (DWORD)(LOWORD(VS_VERSION_INFO));
     
    	CString cVersion;
    	cVersion.Format("%d.%d.%d.%d",dwMajorVersion,dwMinorVersion,dwBuild,dwLast);
     
    	pVal[0] = cVersion.AllocSysString();//	PRODUCTVERSION;
     
    	return S_OK;
    }
    Mais cette méthode ne fonctionne pas et me renvoie systématiquement 1.0.0.1.
    Dans les recherches que j'ai fait, j'ai trouvé des exemples qui utilisait le getFileVersionInfo() mais il faut lui passer en paramètre le chemin du fichier. Or ce chemin, vu que mon fichier est un activeX (un fichier .ocx, en fait) je ne le connais pas.
    Ya t-il un moyen de faire ce que je voudrais ?

    Merci d'avance

  2. #2
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    Mais cette méthode ne fonctionne pas et me renvoie systématiquement 1.0.0.1
    Rien d'étonnant. V_VERSION_INFO et défini ainsi dans WINVER.H :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define VS_VERSION_INFO         1
    Pour récupérer les informations saisies dans la partie version de ton fichier resources, voir GetFileVersionInfoSize(), GetFileVersionInfo() et VerQueryValue().
    Sauf erreur, en ce qui concerne le paramètre lptstrFilename (ce que tu appelles le chemin du fichier), c'est en fait le nom de ton OCX, éventuellement le résultat d'un appel à GetModuleFileName() si tu ne veux pas le spécifier en dur.
    Les orteils servent à trouver les pieds de chaise et les montants de porte quand il fait noir.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut
    C bon j'ai reussi, pour ce que ca interresse voici mon code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    STDMETHODIMP CTransfer::get_activexVersion(BSTR* pVal)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
    	char *rcData = 0; 
    	DWORD dwSize;
    	UINT wSize;
    	LANGANDCODEPAGE *lpTranslate;
     
    	//file name and path
    	CFileStatus status;
    	CString verInfo = "Unavailable";
    	//Version
    	LPDWORD handle1 = 0;
    	dwSize = ::GetFileVersionInfoSize("CTX.ocx", handle1);
    	rcData = new char[dwSize];
     
    	// get valid resource data using path, handle, and size
    	int result = ::GetFileVersionInfo("CTX.ocx", 0, dwSize, (LPVOID)rcData);
    	if (result)
    	{
    		result = ::VerQueryValue(rcData,TEXT("\\VarFileInfo\\Translation" ),
    		(LPVOID*)&lpTranslate, &wSize);
    		if (result == 0 || wSize == 0)
    		{
    		delete []rcData;
    		}
    	}
    	// Read the file description for each language and code page.
    	char SubBlock[100];
    	LPVOID lpBuffer;
    	for( unsigned i=0; i < (wSize/sizeof(struct LANGANDCODEPAGE)); i++ )
    	{
    		wsprintf( SubBlock, 
    		TEXT("\\StringFileInfo\\%04x%04x\\%s"),
    		lpTranslate[i].wLanguage,lpTranslate[i].wCodePage,"FileVersion");
     
    		result = VerQueryValue(rcData, SubBlock, (LPVOID*)&lpBuffer, &wSize);
    		if (!result) 
    		break;
    		verInfo = (LPCSTR)lpBuffer;
    	}
    	delete []rcData;
     
    	pVal[0] = verInfo.AllocSysString();
     
    	return S_OK;
    }
    A bientôt

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

Discussions similaires

  1. Donner un numéro de version à mon projet
    Par CleeM dans le forum Visual Studio
    Réponses: 6
    Dernier message: 12/12/2012, 17h45
  2. Numéro de version de mon application
    Par Thorben dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 13/04/2010, 15h11
  3. [Lazarus] Récupérer le numéro de version de mon projet
    Par Gouyon dans le forum Lazarus
    Réponses: 10
    Dernier message: 18/03/2010, 15h15
  4. Numéro de Version sur appli MFC
    Par Kalite dans le forum MFC
    Réponses: 3
    Dernier message: 11/04/2008, 10h51
  5. [MFC]Recupération de donnée et conversion
    Par Guilhem dans le forum MFC
    Réponses: 8
    Dernier message: 16/06/2004, 10h36

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