15,471
社区成员
发帖
与我相关
我的任务
分享
//获取文件版本信息
DWORD GetDllVersion(LPCTSTR lpFile,LPCTSTR lpKeyName,LPSTR lpVal,UINT* lpLen)
{
struct TRANSLATION
{
WORD wLanguage;
WORD wCodePage;
}*lpTranslation;
DWORD dwSize = 0;
void* lpMem = NULL;
HRESULT hr = 0;
UINT unLen = 0;
TCHAR strSubBlock[MAX_PATH+1] = { 0 };
char* lpHrVal = NULL;
__try
{
if(! (dwSize = GetFileVersionInfoSize((LPTSTR)lpFile,NULL)) )
return GetLastError();
lpMem = malloc(dwSize);
if(!GetFileVersionInfo((LPTSTR)lpFile,0,dwSize,lpMem))
return GetLastError();
hr = VerQueryValue(lpMem,TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&lpTranslation,&unLen);
if(hr == 0)
return 0xFFFF0000; //缺少语言信息定义
sprintf(strSubBlock,TEXT("\\StringFileInfo\\%04x%04x\\%s"), \
lpTranslation->wLanguage,lpTranslation->wCodePage,lpKeyName);
hr = VerQueryValue(lpMem,strSubBlock,(void**)&lpHrVal,lpLen);
if(hr == 0)
return 0xFFFF0000;
strcpy(lpVal,lpHrVal);
return 0;
}
__finally
{
free(lpMem);
lpMem = NULL;
}
}