Ошибка 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)
...
Я не могу понять, в чем проблема. Может кто-нибудь помочь, пожалуйста.
Спасибо.
Ответы
Ответ 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