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、バージョン情報情報しかありません。たとえば、、などを取得するためのwaeはありますFile descriptionか?(「詳細」内にある他のすべてのプロパティ)?Date modifiedOriginal filename

ありがとう !!!!!

4

1 に答える 1

4

ファイルのバージョン情報は可変長です。さまざまな情報が含まれています。これらすべての異なる部分の全長は、の戻り値によって与えられますGetFileVersionInfoSize

電話をかけるVerQueryValueときは、全体的なバージョン情報内の特定の個々の情報を求めています。そして、その特定の部分の長さは、全体のサイズより大きくなることはありません。

のドキュメントにVerQueryFileは、ファイルの説明を抽出するサンプルコードが含まれています。

于 2012-11-29T13:06:36.177 に答える