Подтвердить что ты не робот

Ошибка LNK2019 при использовании GetFileVersionInfoSize()

Я просто включил этот бит в свой уже действующий код, но я получаю ошибку LNK2019. Я вставлю ошибку после вставки кода.

Класс CAboutDlg имеет:

public:

    CStatic m_VersionInfoCtrl;

   virtual BOOL OnInitDialog();

};

Сама функция:

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

}

....

Это дает мне следующие три ошибки:

1.RangemasterGenerator error LNK2019: unresolved external symbol [email protected] referenced in function "public: virtual int __thiscall CAboutDlg::OnInitDialog(void)" ([email protected]@@UAEHXZ)

2.RangemasterGenerator error LNK2019: unresolved external symbol [email protected] referenced in function "public: virtual int __thiscall CAboutDlg::OnInitDialog(void)" ([email protected]@@UAEHXZ)
3.RangemasterGenerator error LNK2019: unresolved external symbol [email protected] referenced in function "public: virtual int __thiscall CAboutDlg::OnInitDialog(void)" ([email protected]@@UAEHXZ)

... Я не могу понять, в чем проблема. Может кто-нибудь помочь, пожалуйста. Спасибо.

4b9b3361

Ответ 1

Вам нужно связать библиотеку, содержащую две функции VerQueryValue и GetFileVersionInfo - компоновщик по умолчанию не знает, где их найти.

Быстрый поиск двух функций в MSDN предполагает, что они оба находятся в системной библиотеке version.dll, а библиотека, которую вы хотите связать, - version.lib. Просто добавьте это в список библиотек в свойствах компоновщика.

Ответ 2

Функции GetFileVersionInfo и GetFileVersionInfoSize определены в Version.dll и Version.lib, поэтому убедитесь, что вам нравятся соответствующие библиотеки.

Ответ 3

Я также получаю такую ​​же ошибку при обновлении приложения VS6.0 на платформе VS2012.

a. ошибка LNK2019: неразрешенный внешний символ _GetFileVersionInfoSizeA @8, указанный в функции _main

b. ошибка LNK2019: неразрешенный внешний символ _GetFileVersionInfoA @16, указанный в функции _main

c. ошибка LNK2019: неразрешенный внешний символ _VerQueryValueA @16, указанный в функции _main

Разрешение:

Я обнаружил, что это связано с отсутствием ссылки на библиотеку "Version.lib".

a.. Для VS6.0 добавьте его в модули Project- > Link- > library

b. Для VS2012 добавить в Project Properties- > Linker- > Input- > Additional Dependancies  и добавьте полный путь lib к каталогу Include.

Ответ 4

Для VS2012 или 2013 добавить в Project Properties- > Linker- > Input- > Additional Dependencies → Add Version.lib