为了在程序中更合理地组织程序的结构,以便日后的维护。在资源方面,如果同时存在多语言的版本,而且在各个版本中有些图片不同、有些相同。如何组织好这些图片资源?我认为有如下的3种方式。
1:把程序中的所有图片都随着一个资源DLL发布。
2:把程序中的所有图片都放在可执行文件的一个相对目录中,程序运行时到指定的目录去加载指定名称的图片。
3:把在各个版本相同的图片放在一个公共的DLL中,把彼此不同的图片放在各自的DLL中。
在这里介绍下第三种方式,也就是如何让一个exe程序加载多个DLL资源,并在这些DLL中找相应的资源的问题:
m_hResDll = ::LoadLibrary(_T("rc1.dll"));
m_hResDll2 = ::LoadLibrary(_T("rc2.dll"));
m_pExeModule = new CDynLinkLibrary(AfxGetInstanceHandle(), AfxGetResourceHandle());
AfxSetResourceHandle(m_hResDll);
m_pExeModule2 = new CDynLinkLibrary(AfxGetInstanceHandle(), AfxGetResourceHandle());
AfxSetResourceHandle(m_hResDll2);
在这里值得注意的是:要调用
m_pExeModule = new CDynLinkLibrary(AfxGetInstanceHandle(), AfxGetResourceHandle());
这个语句,如果没有这个语句,那么这个程序的原有资源模块将视为释放。也就不会到原有的资源模块中去搜索。