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

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

ID:40868748

大小:82.04 KB

页数:9页

时间:2019-08-09

用vc如何获取某个动态链接库的版本信息_第1页
用vc如何获取某个动态链接库的版本信息_第2页
用vc如何获取某个动态链接库的版本信息_第3页
用vc如何获取某个动态链接库的版本信息_第4页
用vc如何获取某个动态链接库的版本信息_第5页
资源描述:

《用vc如何获取某个动态链接库的版本信息》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用vc如何获取某个动态链接库的版本信息我如何获得安装在我的系统上的某个特定的DLL的版本信息?我尝试着确定系统安装了哪个版本的comctl32.dll。我见过有些代码调用GetProcAddress来获取各种函数,如InitCommonControlsEx,以确定基于不同版本的函数调用。对于我来说,这是一个坎儿,到底用什么方法获得版本号?有两种方法:容易的和难的。容易的方法是调用一个专门用于此目的的函数DllGetVersion。问题是虽然comctl32.dll支持该函数,但并不是所有的DLLs都具备它。如果不具备DllGetVe

2、rsion,那么就得用难的方法——使用FileVersionAPI,这可能是你要遭遇到的最为暧昧的API之一。我写了一个类CModuleVersion来封装两种方法,同时还写了一个Demo程序VersionDlg来示范CModuleVersion的使用方法。程序画面如Figure1所示。你可以在编辑框中敲入任何系统模块的名字,VersionDlg将用DllGetVersion(如果具备这个函数的话)和FileVersionAPI两种方法显示版本信息。源代码参见Figure2。Figure1运行中的VersionDlg程序让我们先看容

3、易的方法。DllGetVersion用DLL版本信息填写一个DLLVERSIONINFO结构。该结构定义在Win32SDK的showapi.h头文件中。许多人可能都没有安装PlatformSDK,那么就得自己定义这个结构了(译者注:实际上,早期的DeveloperStudio不包含这个头文件。后来的VisualStudio6.0安装已经包含该头文件,路经参见:Driver:ProgramFilesMicrosoftVisualStudioVC98Include),就像我在VersionDlg所做的那样。typedefstru

4、ct_DllVersionInfo{DWORDcbSize;DWORDdwMajorVersion;DWORDdwMinorVersion;DWORDdwBuildNumber;DWORDdwPlatformID;}DLLVERSIONINFO;这个结构中的字段基本不用怎么说明就知道是什么意思:dwPlatformID为DLLVER_PLATFORM_WINDOWS(value=1)指Windows9x,而DLLVER_PLATFORM_NT(value=2)用于WindowsNT。一旦定义了DLLVERSIONINFO结构,就可以

5、调用DllGetVersion了,该函数的署名如下:HRESULTDllGetVersion(DLLVERSIONINFO*);因为并不是任何给定的Dll都输出DllGetVersion函数,你得按照标准套路来调用它,即调用GetProcAddress并判断返回值是否为NULL。我编写的类CModuleVersion中含有一个DllGetVersion函数,它把所有细节都进行了封装(参见Figure2中的ModulVer.cpp。)CModuleVersion类的使用方法如下:DLLVERSIONINFOdvi;if(CModule

6、Version::DllGetVersion("comctl32.dll",dvi)){//nowinfoisindvi}DllGetVersion是一个比较新的函数(译者注:在1998年是这样。)对于comctl32很好使,因为它实现并输出DllGetVersion——但是对于那些不输出DllGetVersion的DLLs来说怎么办呢?例如:shell32.dll就没有实现DllGetVersion,如Figure3所示。这时你就得用可怕以及奇怪的GetFileVersionInfo和VerQueryValue函数,它们在winv

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

8、ionTab等一会儿你就会发现,这些版本APIs十分暧昧,很容易把人搞晕菜,但CModuleVersion使一切都变得简单明了。这个类派生于VS_FIXEDFILEINFO(参见Figure6),此结构包含“固定的”版本信息,其中有主

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。