用vc怎样获取某个动态链接库版本信息.pdfVIP

用vc怎样获取某个动态链接库版本信息.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vc vc 用vvcc如何获取某个动态链接库的版本信息 我如何获得安装在我的系统上的某个特定的 DLL 的版本信息?我尝试着确定系统安 装了哪个版本的 comctl32.dll。我见过有些代码调用 GetProcAddress 来获取各种函数,如 InitCommonControlsEx,以确定基于不同版本的函数调用。对于我来说,这是一个坎儿,到 底用什么方法获得版本号? 有两种方法:容易的和难的。容易的方法是调用一个专门用于此目的的函数 DllGetVersion。问题是虽然 comctl32.dll 支持该函数,但并不是所有的 DLLs 都具备它。 如果不具备 DllGetVersion,那么就得用难的方法——使用 FileVersionAPI,这可能是你要 遭遇到的最为暧昧的 API 之一。我写了一个类 CModuleVersion 来封装两种方法,同时还 写了一个Demo程序 VersionDlg 来示范 CModuleVersion 的使用方法。程序画面如 Figure 1 所示。你可以在编辑框中敲入任何系统模块的名字,VersionDlg 将用 DllGetVersion (如果 具备这个函数的话)和 FileVersionAPI 两种方法显示版本信息。源代码参见 Figure 2。 让 我 们 先 看 容 易 的 方 法 。 DllGetVersion 用 DLL 版 本 信 息 填 写 一 个 DLLVERSIONINFO 结构。该结构定义在 Win32SDK 的 showapi.h 头文件中。许多人可能 都没有安装 Platform SDK,那么就得自己定义这个结构了(译者注:实际上,早期的 Developer Studio 不包含这个头文件。后来的 Visual Studio 6.0 安装已经包含该头文件,路 经参见:Driver:\Program Files\Microsoft Visual Studio\VC98\Include),就像我在 VersionDlg 所做的那样。 typedef struct _DllVersionInfo {DWORD cbSize;DWORD dwMajorVersion;DWORD dwMinorVersion;DWORD dwBuildNumber;DWORD dwPlatformID;} DLLVERSIONINFO; 这个结构中的字段基本不用怎么说明就知道是什么意思:dwPlatformID 为 DLLVER_PLATFORM_WINDOWS ( value = 1 ) 指 Windows 9x , 而 DLLVER_PLATFORM_NT(value = 2)用于 WindowsNT。一旦定义了 DLLVERSIONINFO 结构,就可以调用 DllGetVersion 了,该函数的署名如下: HRESULTDllGetVersion(DLLVERSIONINFO*); 因为并不是任何给定的 Dll 都输出 DllGetVersion 函数,你得按照标准套路来调用它, 即调用 GetProcAddress 并判断返回值是否为 NULL。我编写的类 CModuleVersion 中含有 一个 DllGetVersion 函数,它把所有细节都进行了封装(参见 Figure2 中的 ModulVer.cpp。) CModuleVersion 类的使用方法如下: DLLVERSIONINFO dvi;if (CModuleVersion::DllGetVersion(comctl32.dll, dvi)) { // now info is in dvi} DllGetVersion 是一个比较新的函数(译者注:在1998年是这样。)对于 comctl32 很好 使,因为它实现并输出 DllGetVersion——但是对于那些不输出 DllGetVersion 的 DLLs 来 说怎么办呢?例如:shell32.dll 就没有实现 DllGetVersion,如 Figure 3 所示。这时你就得 用可怕以及奇怪的 GetFileVersionInfo 和 VerQueryValue 函数,它们在 winver.h 中定义。 大多数可执行程序和 DLLs 都具备 VS_VERSION_INFO 资源,在模块的 RC 文件中 定义。Figure 4 是 VersionDlg 的 RC 文件中的版本信息。你可

文档评论(0)

xina171127 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档