use*_*966 5 c++ versioning dll resources winapi
我有这段代码 - 返回文件版本(到结构中),我使用 shell32.dll 作为示例,但有一些值我不理解它们的含义,并且希望得到解释。
这是代码:
void GetFileVersion( PCHAR pFilePath ,PVERSION pRetVersion)
{
DWORD dwSize = 0;
BYTE *pVersionInfo = NULL;
VS_FIXEDFILEINFO *pFileInfo = NULL;
UINT pLenFileInfo = 0;
/*getting the file version info size */
dwSize = GetFileVersionInfoSize( pFilePath, NULL );
if ( dwSize == 0 )
{
printf( "Error in GetFileVersionInfoSize: %d\n", GetLastError() );
return;
}
pVersionInfo = new BYTE[ dwSize ]; /*allocation of space for the verison size */
if ( !GetFileVersionInfo( pFilePath, 0, dwSize, pVersionInfo ) ) /*entering all info data to pbVersionInfo*/
{
printf( "Error in GetFileVersionInfo: %d\n", GetLastError() );
delete[] pVersionInfo;
return;
}
if ( !VerQueryValue( pVersionInfo, TEXT("\\"), (LPVOID*) &pFileInfo, &pLenFileInfo ) )
{
printf( "Error in VerQueryValue: %d\n", GetLastError() );
delete[] pVersionInfo;
return;
}
/*checking if the allocation succeeded */
if (NULL == pRetVersion)
{
printf("Allocation failed! \n" , GetLastError());
return;
}
pRetVersion->major = ( pFileInfo->dwFileVersionMS >> 16 ) & 0xffff ;
pRetVersion->minor = ( pFileInfo->dwFileVersionMS) & 0xffff;
pRetVersion->hotfix = ( pFileInfo->dwFileVersionLS >> 16 ) & 0xffff;
pRetVersion->other = ( pFileInfo->dwFileVersionLS) & 0xffff;
}
Run Code Online (Sandbox Code Playgroud)
dwSize 的含义是什么?这只是文件版本大小吗?单击 shell32.dll 时在哪里可以看到它?
pLenFileinfo - 这个大小是多少?
当我查看结构体时,VS_FIXEDFILEINFO只有版本信息信息,是否有 wae 可以获取,例如:File description、Date modified等Original filename?(“详细信息”内的所有其他属性)?
谢谢 !!!!!
文件版本信息的长度可变。它包含许多不同的信息。所有这些不同片段的总长度由 的返回值给出GetFileVersionInfoSize。
当您致电时,VerQueryValue您是在询问总体版本信息中的特定单独信息。并且该特定部分的长度永远不能大于整体尺寸。
的文档VerQueryFile包含提取文件描述的示例代码。