使用GetFileVersionInfoSize()时出现LNK2019错误

时间:2011-08-11 15:09:12

标签: c++ mfc

我刚把这个位包含在我已经运行的代码中,但是我收到了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 _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)

... 我无法理解问题所在。任何人都可以帮忙。 感谢。

4 个答案:

答案 0 :(得分:51)

您需要链接包含两个函数VerQueryValueGetFileVersionInfo的库 - 链接器默认不知道在哪里找到它们。

快速搜索MSDN上的两个函数表明它们都在系统库version.dll中,而您要链接的库是version.lib。只需将其添加到链接器属性中的库列表中即可。

答案 1 :(得分:9)

GetFileVersionInfo GetFileVersionInfoSize 的功能在Version.dllVersion.lib中定义,所以请确保喜欢合适的图书馆。

答案 2 :(得分:5)

在将VS6.0应用程序升级到VS2012平台时,我也遇到了同样的错误。

a。错误LNK2019:函数_main中引用了未解析的外部符号_GetFileVersionInfoSizeA @ 8

b。错误LNK2019:函数_main中引用了未解析的外部符号_GetFileVersionInfoA @ 16

c。错误LNK2019:函数_main中引用了未解析的外部符号_VerQueryValueA @ 16

解决:

我发现它缺少对库“Version.lib”的引用。

a。对于VS6.0,请将其添加到项目设置 - >链接 - >库模块

b。对于VS2012,请添加到项目属性 - >链接器 - >输入 - >附加依赖    并添加完整的lib路径到Include目录。

答案 3 :(得分:5)

对于VS2012或2013,添加到项目属性 - >链接器 - >输入 - >其他依赖关系 - >添加Version.lib