【问题标题】:Error LNK2019 when using GetFileVersionInfoSize()使用 GetFileVersionInfoSize() 时出现错误 LNK2019
【发布时间】:2011-10-25 02:12:38
【问题描述】:

我刚刚在我已经工作的代码中包含了这一位,但我收到了 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)

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

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:

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

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

    【讨论】:

    • 我在头文件中添加了 version.lib 为:#pragma comment(lib,"Version.lib") 如何添加 .dll 文件?
    • 你确定头文件被编译了吗?特别是给#pragma的行?
    • 第 11 行。在声明我的头文件之后。
    • 您不必添加 .dll 文件 - .lib 是一个导入库,可确保加载器在运行时拉入正确的 .dll。
    • 这个答案很有帮助,因为当前版本的 MSDN 说要包含不包含符号的 mincore.lib。仍然需要 Version.lib。
    【解决方案2】:

    函数 GetFileVersionInfoGetFileVersionInfoSizeVersion.dllVersion.lib 中定义,因此请确保您喜欢相应的库。 p>

    【讨论】:

    • 实际上 CStatic 是一种特定类型的 MFC 控件,而不是静态成员。见这里:msdn.microsoft.com/en-us/library/t98kd6f7%28v=vs.80%29.aspx
    • @Timo:啊,更正了,那是盲目的,有人投了赞成票! ;-)
    • 等等,但是按照提供的链接,我看到这些函数在 mincore.lib 中。你是对的,它们在 version.lib 中。怎么了?
    【解决方案3】:

    对于 VS2012 或 2013 添加到 Project Properties->Linker->Input->Additional Dependencies -> Add Version.lib

    【讨论】:

    • 这就是我需要做的所有事情。无需担心dll,或文件的完整路径等。
    【解决方案4】:

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

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

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

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

    分辨率:

    我发现这是由于缺少对库“Version.lib”的引用。

    a. 对于 VS6.0,将其添加到 Project Setting->Link->library modules

    b. 对于 VS2012,添加到 Project Properties->Linker->Input->Additional Dependancies 并将完整的库路径添加到包含目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      相关资源
      最近更新 更多