Je viens d'inclure ce bit dans mon code déjà fonctionnel, mais je reçois une erreur LNK2019. Je vais coller l'erreur après avoir collé le code.
La classe CAboutDlg a:
public:
CStatic m_VersionInfoCtrl;
virtual BOOL OnInitDialog();
};
La fonction elle-même:
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString inFileName = AfxGetApp()->m_pszExeName;
inFileName += ".exe";
void * theVersionInfo;
void * theFixedInfo;
unsigned long aVersionInfoSize = GetFileVersionInfoSize ( inFileName , &aVersionInfoSize);
CString returnString;
if (aVersionInfoSize)
{
theVersionInfo = new char [aVersionInfoSize];
GetFileVersionInfo ( inFileName, 0 , aVersionInfoSize, theVersionInfo) ;
unsigned int aSize = 0;
VerQueryValue( theVersionInfo , "\\" , &theFixedInfo , &aSize);
if (theFixedInfo)
{
VS_FIXEDFILEINFO * aInfo = (VS_FIXEDFILEINFO *) theFixedInfo;
DWORD dwMajorVersionMsb = HIWORD( aInfo->dwFileVersionMS );
DWORD dwMajorVersionLsb = LOWORD( aInfo->dwFileVersionMS );
DWORD dwMinorVersionMsb = HIWORD( aInfo->dwFileVersionLS );
DWORD dwMinorVersionLsb = LOWORD( aInfo->dwFileVersionLS );
returnString.Format("Version %d . %d . %d. %d",dwMajorVersionMsb,dwMajorVersionLsb,dwMinorVersionMsb,dwMinorVersionLsb);
//memcpy(sVer,returnString.GetBuffer(),returnString.GetLength()+1);
}
delete theVersionInfo;
}
m_VersionInfoCtrl.SetWindowText(returnString);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
....
Cela me donne les trois erreurs suivantes:
1.RangemasterGenerator error LNK2019: unresolved external symbol _VerQueryValueA@16 referenced in function "public: virtual int __thiscall CAboutDlg::OnInitDialog(void)" (?OnInitDialog@CAboutDlg@@UAEHXZ)
2.RangemasterGenerator error LNK2019: unresolved external symbol _GetFileVersionInfoA@16 referenced in function "public: virtual int __thiscall CAboutDlg::OnInitDialog(void)" (?OnInitDialog@CAboutDlg@@UAEHXZ)
3.RangemasterGenerator error LNK2019: unresolved external symbol _GetFileVersionInfoSizeA@8 referenced in function "public: virtual int __thiscall CAboutDlg::OnInitDialog(void)" (?OnInitDialog@CAboutDlg@@UAEHXZ)
... Je ne peux pas comprendre quel est le problème. Quelqu'un peut-il aider s'il vous plaît. Merci.
Vous devez établir un lien avec la bibliothèque qui contient les deux fonctions VerQueryValue
et GetFileVersionInfo
- l'éditeur de liens ne sait pas par défaut où les trouver.
Une recherche rapide des deux fonctions sur MSDN suggère qu'elles se trouvent toutes deux dans la bibliothèque système version.dll et que la bibliothèque que vous souhaitez lier est version.lib. Ajoutez simplement cela à la liste des bibliothèques dans les propriétés de l'éditeur de liens.
Les fonctions GetFileVersionInfo et GetFileVersionInfoSize sont définis dans Version.dll
et Version.lib
alors assurez-vous que vous aimez les bibliothèques appropriées.
Je reçois également la même erreur lors de la mise à niveau de l'application VS6.0 vers la plateforme VS2012.
a. erreur LNK2019: symbole externe non résolu _GetFileVersionInfoSizeA @ 8 référencé dans la fonction _main
b. erreur LNK2019: symbole externe non résolu _GetFileVersionInfoA @ 16 référencé dans la fonction _main
c. erreur LNK2019: symbole externe non résolu _VerQueryValueA @ 16 référencé dans la fonction _main
Résolution:
J'ai trouvé que c'était dû à une référence manquante à la bibliothèque "Version.lib".
a. Pour VS6.0, ajoutez-le à Configuration du projet-> Lien-> modules de bibliothèque
b. Pour VS2012, ajoutez à Propriétés du projet-> Linker-> Input-> Dépendances supplémentaires et ajoutez le chemin d'accès complet à la bibliothèque pour inclure annuaire.
Pour VS2012 ou 2013, ajoutez aux propriétés du projet-> Éditeur de liens-> Entrée-> Dépendances supplémentaires -> Ajouter Version.lib