2012-05-24 145 views
1

我想獲取dll或exe的版本信息。爲此,我調用VerQueryValue函數。調用VerQueryValue時出現錯誤1813

這裏是我的代碼:

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。

我該如何解決?先謝謝了。

回答

2

根據MSDN,該錯誤代碼映射到ERROR_RESOURCE_TYPE_NOT_FOUND。因此,我會斷定圖像文件中不存在您正在查找的資源(FileDescription)。

相關問題