2012-05-24 100 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)。

相关问题