既に動作しているコードにこのビットを含めただけですが、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)
...問題が何なのか理解できません。誰かが助けてくれますか?ありがとう。
2つの関数VerQueryValue
とGetFileVersionInfo
を含むライブラリをリンクする必要があります-リンカーはデフォルトでそれらを見つける場所を知りません。
MSDNで2つの関数を簡単に検索すると、どちらもシステムライブラリversion.dllにあり、リンクするライブラリはversion.libであることがわかります。リンカープロパティのライブラリリストに追加するだけです。
関数GetFileVersionInfoおよびGetFileVersionInfoSizeは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の場合は、Project Setting-> Link-> library modulesに追加します
b。 VS2012の場合、プロジェクトプロパティ->リンカー->入力->追加の依存関係に追加し、インクルードする完全なlibパスを追加しますディレクトリ。
VS2012または2013の場合、プロジェクトのプロパティに追加->リンカー->入力->追加の依存関係-> Add Version.lib