AtlGetCommCtrlVersion 和 AtlGetShellVersion


/
// General DLL Version Helpers
#pragma warning(push)
#pragma warning(disable : 4191) // 'type cast' : unsafe conversion from 'FARPROC' to 'DLLGETVERSIONPROC'
inline HRESULT AtlGetDllVersion(
 _In_ HINSTANCE hInstDLL,
 _Out_ DLLVERSIONINFO* pDllVersionInfo)
{
 ATLENSURE(pDllVersionInfo != NULL);
 // We must get this function explicitly because some DLLs don't implement it.
 DLLGETVERSIONPROC pfnDllGetVersion = (DLLGETVERSIONPROC)::GetProcAddress(hInstDLL, "DllGetVersion");
 if(pfnDllGetVersion == NULL)
 {
  return E_NOTIMPL;
 }
 return (*pfnDllGetVersion)(pDllVersionInfo);
}
#pragma warning(pop)
inline HRESULT AtlGetDllVersion(
 _In_z_ LPCTSTR lpstrDllName,
 _Out_ DLLVERSIONINFO* pDllVersionInfo)
{
 HINSTANCE hInstDLL = ::LoadLibrary(lpstrDllName);
 if(hInstDLL == NULL)
 {
  return AtlHresultFromLastError();
 }
 HRESULT hRet = AtlGetDllVersion(hInstDLL, pDllVersionInfo);
 ::FreeLibrary(hInstDLL);
 return hRet;
}
// Common Control Versions:
//   WinNT 4.0          maj=4 min=00
//   IE 3.x             maj=4 min=70
//   IE 4.0             maj=4 min=71
//   IE 5.0             maj=5 min=80
//   Win2000            maj=5 min=81
inline HRESULT AtlGetCommCtrlVersion(
 _Out_ LPDWORD pdwMajor,
 _Out_ LPDWORD pdwMinor)
{
 ATLENSURE(( pdwMajor != NULL ) && ( pdwMinor != NULL ));
 DLLVERSIONINFO dvi;
 memset(&dvi, 0, sizeof(dvi));
 dvi.cbSize = sizeof(dvi);
 HRESULT hRet = AtlGetDllVersion(_T("comctl32.dll"), &dvi);
 if(SUCCEEDED(hRet))
 {
  *pdwMajor = dvi.dwMajorVersion;
  *pdwMinor = dvi.dwMinorVersion;
 }
 return hRet;
}
// Shell Versions:
//   WinNT 4.0                                      maj=4 min=00
//   IE 3.x, IE 4.0 without Web Integrated Desktop  maj=4 min=00
//   IE 4.0 with Web Integrated Desktop             maj=4 min=71
//   IE 4.01 with Web Integrated Desktop            maj=4 min=72
//   Win2000                                        maj=5 min=00
inline HRESULT AtlGetShellVersion(
 _Out_ LPDWORD pdwMajor,
 _Out_ LPDWORD pdwMinor)
{
 ATLENSURE(( pdwMajor != NULL) && ( pdwMinor != NULL ));
 DLLVERSIONINFO dvi;
 memset(&dvi, 0, sizeof(dvi));
 dvi.cbSize = sizeof(dvi);
 HRESULT hRet = AtlGetDllVersion(_T("shell32.dll"), &dvi);
 if(SUCCEEDED(hRet))
 {
  *pdwMajor = dvi.dwMajorVersion;
  *pdwMinor = dvi.dwMinorVersion;
 }
 return hRet;
}



=================================================================

HRESULT AtlGetDllVersion(HINSTANCE hInstDLL, DLLVERSIONINFO* pDllVersionInfo)

HRESULT AtlGetDllVersion(LPCTSTR lpstrDllName, DLLVERSIONINFO* pDllVersionInfo)

这两个函数到给定的模块中寻找名为 DllGetVersion() 的导出函数,如果找到了,就调用之。如果 DllGetVersion() 调用成功,它把版本信息返回到 DLLVERSIONINFO结构里。

HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) 返回 comctl32.dll 的主版本和次版本。

HRESULT AtlGetShellVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) 返回 shell32.dll 的主版本和次版本。


使用说明 微软最新的编程工具Visual Studio 2013 已经发布,想在该平台下使用WTL的话,目前还没有对应的安装文件(一般学者),本人将自己改写的文件上传到CSDN,供朋友使用。改写的版本为 WTL81_12085 第一步:下载文件包“WTL_81_12085_For_VS2013.rar”,解压后,有两个文件夹和两个文件 文件夹: Application (WTL添加到VS创建向导里的一些文件) 文件夹: Include (include就是WTL的头文件) 文件: setup120.js (安装脚本) 文件: 使用说明.txt 第二步:找到"VS安装目录\VC\VCWizards\AppWiz"这个目录, 如我电脑上就是"F:\Program Files\Microsoft Visual Studio 12.0\VC\VCWizards\AppWiz", 在这个目录下新建一个WTL文件夹,然后将Application文件夹和setup120.js拷贝到WTL文件夹下。 第三步:双击“setup120.js”进行安装,或者用命令行执行。 命令行操作方法如下: 运行CMD,执行如下代码: wscript //e:jscript "F:\Program Files\Microsoft Visual Studio 12.0\VC\VCWizards\AppWiz\WTL\setup110.js" 第四步:在“安装盘:\Program Files\Microsoft Visual Studio 12.0\VC”建一个WTL文件夹, 将解压出来的Include文件夹拷贝到此文件夹下面。 在编译工程时,将“安装盘:\Program Files\Microsoft Visual Studio 12.0\VC\WTL\Include”目录添加进包含目录。 第四步,可以不操作,只要编译时,将Include (WTL的头文件)目录添加进包含目录。 添加包含目录的操作为:打开工程属性页->配置属性->VC++目录->包含目录->编辑->写入路径->确定 也可以通过改写配置文件,添加为默认的包含路径,具体的方法请在网上找一下。 任何单位或个人转发本文件包请保留作者信息,谢谢! 水梦雪 SnowEmail3074@163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值