GetFileVersionInfoSize, probleme de link

gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009 - 16 févr. 2004 à 10:54
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 16 févr. 2004 à 20:15
en utilisant : GetFileVersionInfoSize
j'ai un probleme de lien, et je ne sais pas d'ou ca vient (# include ???)

DWORD info;
DWORD toto;
info = GetFileVersionInfoSize ("O:\\vegetation\\Traitement_fichier.exe",&toto);

l'erreur est:
setupDlg.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoSizeA@8
Debug/setup.exe : fatal error LNK1120: 1 unresolved externals

merci pour votre aide.

9 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 févr. 2004 à 11:08
un problème de lien ne vient jamais d'un include manquant (pour une fonction win32 en tout cas), je crois que tu dois utiliser la librairie version.lib
Ecris ca au début de ton programme
#pragma comment(lib, "Version.lib")
et ca devrait marcher
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
16 févr. 2004 à 11:55
ok, ca marche, mais j'aurais jamais trouvé tout seul.
(pourtant cette librairie est declaré dans les settings)

comment on peut savoir ca tout seul ?????
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 févr. 2004 à 12:18
tu peux trouver ca en allant sur le site de msdn ou toutes les fonction de windows sont décrites, notamment le header et la libraire à utiliser en base de page.Pour cette fonction:

http://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Resources/VersionInformation/VersionInformationReference/VersionInformationFunctions/GetFileVersionInfoSize.asp

Function Information

Header Declared in Winver.h, include Windows.h
Import library Version.lib
Minimum operating systems Windows 95, Windows NT 3.1
Unicode Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
16 févr. 2004 à 13:07
HANDLE hfl = CreateFile("O:\\vegetation\\Traitement_fichier.exe",GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);

if(hfl == INVALID_HANDLE_VALUE) return;
taille = GetFileSize(hfl, 0);

DWORD info;
DWORD toto;
info = GetFileVersionInfoSize("O:\\vegetation\\Traitement_fichier.exe",&toto);

LPVOID version;
GetFileVersionInfo(file,NULL,info,&version);
CloseHandle(hfl);

// lorsque je fais GetFileVersionInfo, mes variables (taille,et info) sont modifiés, pas normal ca.

et puis je ne recupere pas les infos (version)
HELP ME

LPVOID version;

GetFileVersionInfo("O:\\vegetation\\Traitement_fichier.exe",NULL, info,&version);

mais
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 févr. 2004 à 14:37
1)si taille est modifée par l'appel de GetFileVersionInfo, c'est sur qu'il y a un petit pb, tu as tu te tromper, car taille n'a rien a voir avec ca.
2)est-tu sur que Traitement_fichier.exe contienne des information de version
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
16 févr. 2004 à 16:49
j'ai trouvé ce code ecris en c que j'ai un peu modifié en c++(pas tout)
cependant je ne comprends pas le formatage ecris avec sprintf, ni la structure declaré TRANARRAY....
ce code marche nikel mais je ne comprends pas tout
une petite explication peut etre????

char* sFilename;
sFilename = "O:\\vegetation\\Traitement_fichier.exe";
DWORD dwHandle;
DWORD nBufferSize;
LPVOID pBuffer;
LPTSTR pInfo;
UINT nInfoSize;

struct TRANSARRAY
{
WORD wLanguageID;
WORD wCharacterSet;
};

TRANSARRAY *lpTransArray;
char sCharset[8];
char sQueryString[255];

nBufferSize = GetFileVersionInfoSize(sFilename,&dwHandle);
if (nBufferSize > 0)
{
pBuffer = new char[nBufferSize];
if (pBuffer != NULL)
{
if (GetFileVersionInfo(sFilename, dwHandle, nBufferSize,pBuffer))
{

VerQueryValu(pBuffer,"\\VarFileInfo\\Translation", (LPVOID*)&pInfo,&nInfoSize);
lpTransArray = (TRANSARRAY *) pInfo;
sprintf(sCharset,"%04x%04x", lpTransArray[0].wLanguageID,lpTransArray[0].wCharacterSet);

strcpy(sQueryString, "\\StringFileInfo\");
strcat(sQueryString, sCharset);
strcat(sQueryString, "\\FileVersion");
VerQueryValue(pBuffer, sQueryString, (LPVOID*) &pInfo,&nInfoSize);

delete (pBuffer);
}
}
}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 févr. 2004 à 18:54
sprintf: c'est comme printf (ca tu dois connaitre), mais le résultat est mis dans la chaine de caractères passée en 1er arg à la fonction
pour le reste, tu devrais aller voir ce que MSDN te dit sur VerQueryValue
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
16 févr. 2004 à 19:40
OK, mais c'est : ,"%04x%04x que je ne comprends pas
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 févr. 2004 à 20:15
j'imagine que c'est pour imprimer en hexadécimal sur 4 caractères
0
Rejoignez-nous