1

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 エラーが発生しました。このコードは URL http://msdn.microsoft.com/zh-cn/library/ms647464%28v=vs.85%29とほぼ同じです。

vc++6 および vc++2005 でコードをテストしたところ、同じエラーが発生しました。私のウィンドウはwin7です。

どうすれば直せますか?ありがとうございます。

4

1 に答える 1

3

MSDNによると、このエラー コードは ERROR_RESOURCE_TYPE_NOT_FOUND にマップされます。したがって、探しているリソース (FileDescription) は画像ファイルに存在しないと結論付けます。

于 2012-05-24T09:46:06.103 に答える