web-dev-qa-db-ja.com

GetFileVersionInfoSize()使用時のエラーLNK2019

既に動作しているコードにこのビットを含めただけですが、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

}

....

次の3つのエラーが表示されます。

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)

...問題が何なのか理解できません。誰かが助けてくれますか?ありがとう。

33
Neophile

2つの関数VerQueryValueGetFileVersionInfoを含むライブラリをリンクする必要があります-リンカーはデフォルトでそれらを見つける場所を知りません。

MSDNで2つの関数を簡単に検索すると、どちらもシステムライブラリversion.dllにあり、リンクするライブラリはversion.libであることがわかります。リンカープロパティのライブラリリストに追加するだけです。

54
Timo Geusch

関数GetFileVersionInfoおよびGetFileVersionInfoSizeVersion.dllVersion.libで定義されているので、適切なライブラリを好みます。

9
Alok Save

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の場合、プロジェクトプロパティ->リンカー->入力->追加の依存関係に追加し、インクルードする完全なlibパスを追加しますディレクトリ。

5
Mahendra

VS2012または2013の場合、プロジェクトのプロパティに追加->リンカー->入力->追加の依存関係-> Add Version.lib

5
AirCal86