#pragma comment(lib, "Version.lib ")
C++实现:
void SetInitApp()
{
string appname;
char l_wcaAppPath[MAX_PATH];//保存应用程序路径
::GetModuleFileName(NULL, l_wcaAppPath, MAX_PATH);
CString l_cstrProductVersion;
UINT l_uiVersionInfoSize;
TCHAR* l_ptcVersionInfo;
l_uiVersionInfoSize = ::GetFileVersionInfoSize(l_wcaAppPath, 0);
l_ptcVersionInfo = new TCHAR[l_uiVersionInfoSize];
struct VersionLanguage {
WORD m_wLanguage;
WORD m_wCcodePage;
};
VersionLanguage* l_ptVersionLanguage;
UINT l_uiSize;
if (::GetFileVersionInfo(l_wcaAppPath, 0, l_uiVersionInfoSize, l_ptcVersionInfo) != 0)
{
if (::VerQueryValue(l_ptcVersionInfo, _T("\VarFileInfo\Translation"), reinterpret_cast(&l_ptVersionLanguage), &l_uiSize)) {
CString l_cstrSubBlock;
l_cstrSubBlock.Format(_T("\StringFileInfo\%04x%04x\ProductVersion"), l_ptVersionLanguage->m_wLanguage, l_ptVersionLanguage->m_wCcodePage);
LPVOID* l_pvResult;
if (::VerQueryValue(static_cast(l_ptcVersionInfo), l_cstrSubBlock.GetBuffer(), reinterpret_cast(&l_pvResult), &l_uiSize)) {
l_cstrProductVersion = (reinterpret_cast(l_pvResult));
}
}
}
CString sdate = __DATE__ ;
CString stime = __TIME__;
CString str = sdate + " " + stime;
CString appinfo = "[V" + l_cstrProductVersion + "] " + str;
Gwindb.AppLog(appinfo.GetBuffer());
}
C语言实现:
int Init_DLL_Version()
{
DWORD dwHandle, dwLen;
UINT BufLen;
LPTSTR lpData;
VS_FIXEDFILEINFO* pFileInfo;
dwLen = GetFileVersionInfoSizeA(".//test.dll", &dwHandle);
if (!dwLen)
return FALSE;
lpData = (LPTSTR)malloc(dwLen);
if (!lpData)
return FALSE;
if (!GetFileVersionInfoA(".//test.dll", dwHandle, dwLen, lpData))
{
free(lpData);
return FALSE;
}
if (VerQueryValueA(lpData, "\", (LPVOID*)&pFileInfo, (PUINT)&BufLen))
{
sprintf(LDllVersion,"%d%d.%d%d",HIWORd(pFileInfo->dwFileVersionMS), LOWORd(pFileInfo->dwFileVersionMS), HIWORd(pFileInfo->dwFileVersionLS), LOWORd(pFileInfo->dwFileVersionLS));
free(lpData);
return TRUE;
}
free(lpData);
return FALSE;
}



