实现利用程序中的并行组件同享(二)[VC/C++编程]
本文“实现利用程序中的并行组件同享(二)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
当将现有组件改正成并行时,恰是将它的激活方法改成利用相对途径和断绝全局状况.重要的是给它一个新的 CLSID、ProgId,并且重命名该文件,然后将这个 CLSID、ProgId 以及新文件名用于后来的并行组件.这样做可以避免在并行版本上再注册该组件的非并行版本而惹起的冲突.并行组件和他们从前的非并行版本不向后兼容.
状况存储
关于注册表中存储的状况(设置),需求将状况私有化为该利用程序运行的上下文.可以利用 GetModuleFileName() 函数设置一个虚拟根.应对 HKLM 和 HKCU 分支履行该操作.
必须在每个版本的底子上完成注册设置,以得到注册表的断绝.注册表项是组件保存其状况的通用办法.因为在机械中大概存在组件的差别版本,因此重要的是当重新编译时,能尽大概简单地找到您的表项的版本.得到一套优异的头文件和有效的 API,会使得这件事情变得简单.
用下列命名约定在表项中存储注册状况:
HKCU\MyCompany\MyComponent\VersionXXXX\
比方,假定一个称为 EnableSuperCoolFeature 的配置设置有真或假的值.在注册表中存储该信息的传统方法为:
HKEY_CurrentUser\Software\MyCompany\MyComponent\
EnableSuperCoolFeature = TRUE
在并行同享情形下,该当用以下方法存储它:
HKEY_CurrentUser\Software\MyCompany\MyComponent\Version01.01
EnableSuperCoolFeature = TRUE
别的,假如肯定需求断绝每个利用程序,可以利用
HKCU\MyCompany\MyComponent\VersionXXYY\SomeApplication\\
此中“SomeApplication”是 GetModuleFileName 的返回值.这样做使组件可以断绝它的设置,该设置只针对当前正在运行的利用程序.
抱负的情形下,应支持永久模子,以使利用程序担负起保持用户状况的责任并且不更改注册表.利用程序没必要直接与组件的注册表项接触.作为替换,组件应供应一些 API,以保存或恢复与并行一致的设置.
关于全局状况下的交互,存储在除注册表以外的其他位置的设置,应以并行方法存储.这类存储包含:
被保护的存储 (pstore)
WinInet 高速缓存
Microsoft SQL Server™ 或 Microsoft Jet 数据库
安装并行组件
安装之前
安装并行组件之前,必须肯定在您的操作系统中能否支持它们.下列代码检测并行同享能否可用.假如不可用,组件必须安装在系统目录中.
BOOL bPlatformSupportsSideBySide(void)
{
OSVERSIONINFOEX osviex ;
osviex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
// 若平台不支持 OSVERSIONINFOEX 构造,就不支持并行
// 在内核中,我们已经使这些改正连在一同
//
if (!GetVersionEx((OSVERSIONINFO *)&osviex))
{
return FALSE ; // 无 DLL 重定向
}
// 但是关于 NT,则 NT4 SP4 支持 OSVERSIONINFOEX 支持,但它不支持 DLL 重定向.
// 若 DLL 重定向呈目前将来的 NT4 SP 中,必须更新此代码.
//
if ( (osviex.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
(osviex.dwMajorVersion < 5) )
{
return FALSE ;
}
// 关于其他平台标识,假定具有并行支持
return TRUE ;
}
以上是“实现利用程序中的并行组件同享(二)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |