C++ 使用GetFileVersionInfo()时出现错误LNK2019
我刚刚在我已经工作的代码中包含了这一点,但是我得到了一个LNK2019错误。粘贴代码后,我将粘贴错误 CAboutDlg类具有:C++ 使用GetFileVersionInfo()时出现错误LNK2019,c++,mfc,C++,Mfc,我刚刚在我已经工作的代码中包含了这一点,但是我得到了一个LNK2019错误。粘贴代码后,我将粘贴错误 CAboutDlg类具有: public: CStatic m_VersionInfoCtrl; virtual BOOL OnInitDialog(); }; 功能本身: BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); CString inFileName = AfxGetApp()-&
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 _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)
。。。
我无法理解问题是什么。谁能帮忙吗。
谢谢。函数和在
Version.dll
和Version.lib
中定义,因此请确保,您喜欢合适的库。您需要链接包含两个函数的库VerQueryValue
和GetFileVersionInfo
-默认情况下链接器不知道在哪里可以找到它们
在MSDN上快速搜索这两个函数表明它们都在系统库
version.dll
中,您要链接的库是version.lib
。只需将其添加到链接器属性中的库列表中。在将VS6.0应用程序升级到VS2012平台时,我也遇到了相同的错误。
a.错误LNK2019:未解析的外部符号_GetFileVersionInfoSizeA@8在函数_main中引用
b.错误LNK2019:未解析的外部符号_GetFileVersionInfoA@16在函数_main中引用
c.错误LNK2019:未解析的外部符号_VerQueryValueA@16在函数_main中引用
分辨率:
我发现这是因为缺少对库“Version.lib”的引用
a.对于VS6.0,将其添加到项目设置->链接->库模块中
b.对于VS2012,添加到项目属性->链接器->输入->其他依赖项
并添加完整的库路径以包含目录。对于VS2012或2013,添加到项目属性->链接器->输入->附加依赖项->添加版本。实际上,CStatic是一种特定的MFC控件,而不是静态成员。看这里:@Timo:ah,更正,这是一个瞎子&有人投了赞成票!;-)等等,但是根据提供的链接,我看到那些函数位于
mincore.lib
中。你是对的,它们在version.lib中。怎么了?我在头文件中添加了version.lib,如下所示:#pragma comment(lib,“version.lib”)如何添加.dll文件?是否确实编译了头文件?特别是给出#pragma
?第11行的行。声明了我的头文件后就可以了。您不必添加.dll文件,.lib是一个导入库,它可以确保加载程序在运行时拉入正确的.dll。这个答案很有用,因为当前版本的MSDN要求包含mincore.lib
,其中不包含符号。仍然需要Version.lib。这就是我需要做的全部。无需担心dll或文件的完整路径等。