如何获取某个动态库的版本信息

 

具体方法如下:

 

1.0 以vc6.0为例,首先在Project --- Settings --- Link --- Category:Input ---Object/Library modules : version.lib 

 

     也可以在代码当中,进行隐式的调用 ---  调用方法为  

 

     #pragma comment(lib,"version.lib")

 

 

2.0 具体代码如下:

 

CHAR   szAppPath[   MAX_PATH   ] =   {   0   };   

 

// 获取应用程序的名字

 

::GetModuleFileName(   NULL,   szAppPath,   MAX_PATH   );   

 

// 获取当前使用的应用程序的版本信息。

INT   nVersionLen =   ::GetFileVersionInfoSize(   szAppPath ,   NULL   );   

if   (   nVersionLen   <=   0   )   

{   

return   ;   

}   

CHAR*   pBuffer =   new   CHAR[   nVersionLen   ];   

if   (   !pBuffer   )     

{   

return   ;   

}   

if   (   !::GetFileVersionInfo(   szAppPath,   NULL,   nVersionLen,   pBuffer   )   )   

{   

return   ;   

}   

//   为了方便访问。   

struct   LANGANDCODEPAGE   {   

WORD   wLanguage;   

WORD   wCodePage;   

}   *lpTranslate;   

//   Read   the   list   of   languages   and   code   pages.   

UINT   cbTranslate;   

::VerQueryValue(   pBuffer,   "//VarFileInfo//Translation",   

(LPVOID*)&lpTranslate,   &cbTranslate   );   

//   Read   the   file   description   for   each   language   and   code   page.   

//   资源的各种名称   

//CHAR*   szVersion[]   =   {     

// "Comments",   "InternalName",   "ProductName",   

// "CompanyName",   "LegalCopyright",   "ProductVersion",   

// "FileDescription",   "LegalTrademarks",   "PrivateBuild",   

// "FileVersion",   "OriginalFilename",   "SpecialBuild"     

//};   

//   dwBytes最大值应该是301.   

//   应用仅仅允许输入最多300个字符:)   

UINT   dwBytes;   

CHAR*   lpBuffer;   

CHAR   szSubBlock[256]; 

CString m_stAppVersion;

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//Comments",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//InternalName",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//ProductName",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//CompanyName",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//LegalCopyright",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//ProductVersion",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//FileDescription",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//FileVersion",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//PrivateBuild",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

_snprintf(   szSubBlock,   256,   "//StringFileInfo//%04x%04x//OriginalFilename",   

lpTranslate[0].wLanguage,   lpTranslate[0].wCodePage   );   

if(   ::VerQueryValue(   pBuffer,   szSubBlock,   (   LPVOID*   )&lpBuffer,   &dwBytes   )   )   

{   

m_stAppVersion =   lpBuffer;   

}   

delete[]   pBuffer;   

return   ;

}

你可能感兴趣的:(如何获取某个动态库的版本信息)