WEB开发网
开发学院软件开发VC 如何获取某个动态链接库的版本信息 阅读

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

 2010-07-25 20:46:46 来源:WEB开发网   
核心提示:大多数可执行程序和 DLLs 都具备 VS_VERSION_INFO 资源,在模块的 RC 文件中定义,如何获取某个动态链接库的版本信息(2),Figure 4 是 VersionDlg 的 RC 文件中的版本信息,你可以用文本编辑器或者 Visual Studio 直接编辑资源文件中的这段信息,VerQueryVal

大多数可执行程序和 DLLs 都具备 VS_VERSION_INFO 资源,在模块的 RC 文件中定义。Figure 4 是 VersionDlg 的 RC 文件中的版本信息。你可以用文本编辑器或者 Visual Studio 直接编辑资源文件中的这段信息。你可以指定文件版本,产品版本等等,以及任何你想要编辑的字段,如:CompanyName、InternalName。文件版本信息与 Exe 或 DLL 文件在资源管理器“属性”页“版本”标签中显示的信息相同(参见 Figure 5)。

Figure 5 Version Tab

等一会儿你就会发现,这些版本 APIs 十分暧昧,很容易把人搞晕菜,但 CModuleVersion 使一切都变得简单明了。这个类派生于 VS_FIXEDFILEINFO(参见 Figure 6),此结构包含“固定的”版本信息,其中有主版本号和次版本号,还有一些 DLLVERSIONINFO 里的东西。使用 CModuleVersion 时,只要像下面这样写即可:

CModuleVersion ver;
if (ver.GetFileVersionInfo(_T("comctl32.dll"))
{
  WORD major = HIWORD(ver.dwFileVersionMS);
  WORD minor = LOWORD(ver.dwFileVersionMS);
  ...
}

为了存取 CompanyName 这样的可变信息以及内涵的模块创建信息,你可以用另外一个函数 CModuleVersion:: GetValue,例如,下面代码段执行之后,sCompanyName 的值将类似“XYZ”或“Acme Corporation”这样的公司名称:

CString sCompanyName =
ver.GetValue(_T("CompanyName"));

CModuleVersion 隐藏了获取信息所要做的所有邋遢细节——相信我,都是些邋遢细节!如果你只是想使用 CModuleVersion,那么看到这里就可以打住了;如果你想要了解 CModuleVersion 的工作原理,那就继续往下看。

假设 CModuleVersion::GetFileVersionInfo 能加载模块并获取 HINSTANCE,它调用 ::GetFileVersionInfoSize 来获取版本信息的大小,然后分配一个缓冲并调用 GetFileVersionInfo 来填充该缓冲。原始缓冲(CModuleVersion::m_pVersionInfo)是一个数据块,它包含固定的信息和可变信息。VerQueryValue 将一个指针指向你感兴趣的特定信息的起始位置。例如,为了得到固定的信息(VS_FIXEDFILEINFO),你得这样写:

LPVOID lpvi;
UINT iLen;
VerQueryValue(buf, _T("\"), &lpvi, &iLen);

Tags:如何 获取 某个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接