Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用GetFileVersionInfo()时出现错误LNK2019_C++_Mfc - Fatal编程技术网

C++ 使用GetFileVersionInfo()时出现错误LNK2019

C++ 使用GetFileVersionInfo()时出现错误LNK2019,c++,mfc,C++,Mfc,我刚刚在我已经工作的代码中包含了这一点,但是我得到了一个LNK2019错误。粘贴代码后,我将粘贴错误 CAboutDlg类具有: public: CStatic m_VersionInfoCtrl; virtual BOOL OnInitDialog(); }; 功能本身: BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); CString inFileName = AfxGetApp()-&

我刚刚在我已经工作的代码中包含了这一点,但是我得到了一个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)
。。。 我无法理解问题是什么。谁能帮忙吗。
谢谢。

函数
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或文件的完整路径等。