我想获取dll或exe的版本信息。为此,我调用函数VerQueryValue。
这是我的代码:
UINT dwBytes;
DWORD dwSize = GetFileVersionInfoSizeA(pszFile, (DWORD*)&dwBytes);
if( dwSize == 0)
return;
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
UINT cbTranslate;
LPVOID lpData = (LPVOID)malloc(dwSize);
ZeroMemory(lpData, dwSize);
if(GetFileVersionInfoA(pszFile, 0, dwSize, lpData) )
{
VerQueryValueA(lpData,
"\\VarFileInfo\\Translation",
(LPVOID*)&lpTranslate,
&cbTranslate);
// Read the file description for each language and code page.
char strSubBlock[MAX_PATH] = {0};
char* lpBuffer;
for(int i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
{
sprintf(strSubBlock,
"\\StringFileInfo\\%04x%04x\\FileDescription",
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
// Retrieve file description for language and code page "i".
VerQueryValueA(lpData,
strSubBlock,
(void**)&lpBuffer,
&dwBytes);
}
}
free( lpData );
调用VerQueryValueA时出现1813错误。此代码与网址http://msdn.microsoft.com/zh-cn/library/ms647464%28v=vs.85%29几乎相同。
我已经在vc ++ 6和vc ++ 2005下测试了代码并得到了同样的错误。我的窗户是win7。
我该如何解决?谢谢你提前。
答案 0 :(得分:3)
根据MSDN,此错误代码映射到ERROR_RESOURCE_TYPE_NOT_FOUND。因此,我会得出结论,图像文件中不存在您要查找的资源(FileDescription)。