3

我有这段代码——返回文件版本(到结构中),我以 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;      

}
  1. dwSize 的含义是什么?这只是文件版本大小吗?单击 shell32.dll 时在哪里可以看到它?

  2. pLenFileinfo - 这个大小是多少?

  3. 当我查看VS_FIXEDFILEINFO只有版本信息信息的结构时,是否有获取例如:File descriptionDate modified等的方法Original filename?(“详细信息”中的所有其他属性)?

谢谢 !!!!!

4

1 回答 1

4

文件版本信息是可变长度的。它包含许多不同的信息。所有这些不同片段的总长度由 的返回值给出GetFileVersionInfoSize

当您打电话时,VerQueryValue您是在询问整体版本信息中的特定信息。并且该特定部分的长度永远不能大于整体尺寸。

的文档VerQueryFile包含提取文件描述的示例代码。

于 2012-11-29T13:06:36.177 回答