web-dev-qa-db-fra.com

Erreur LNK2019 lors de l'utilisation de GetFileVersionInfoSize ()

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.

33
Neophile

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.

54
Timo Geusch

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.

9
Alok Save

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.

5
Mahendra

Pour VS2012 ou 2013, ajoutez aux propriétés du projet-> Éditeur de liens-> Entrée-> Dépendances supplémentaires -> Ajouter Version.lib

5
AirCal86