VC纯资源DLL实现国际化教程

版权申诉
0 下载量 160 浏览量 更新于2024-09-08 收藏 184KB PDF 举报
"这篇文档详细介绍了如何利用VC++编译纯资源DLL来解决软件的国际化问题,主要针对MFC应用程序。方法虽然繁琐但并不复杂,主要是通过调整资源搜索顺序来实现。" 在软件开发中,国际化(Internationalization)是使应用能够适应不同语言和地区的关键步骤。VC++开发环境中,可以通过创建纯资源DLL来实现这一目标,使得应用程序能够动态加载不同的语言资源。以下将按照文档中的步骤解析这个过程。 首先,我们需要创建主工程,这是承载国际化功能的主体。在Visual Studio 6.0中,选择“MfcAppWizard(exe)”创建一个新的MFC应用程序项目,命名为"multilanguage"。为了实现国际化,我们需要移除所有内置的资源文件,包括`.rc`和`.h`文件,这样做的目的是让主程序不包含任何特定语言的资源,而是依赖于外部DLL来提供这些资源。 接着,创建英文版的DLL。使用"MfcAppWizard(dll)"模板创建一个新的MFC DLL项目,命名为"english"。同样,我们需要移除这个DLL中的所有默认资源,只保留用于存放英文资源的部分。这样,DLL就成为了专门存储特定语言资源的地方。 在主工程中,我们需要在运行时动态加载对应的DLL。例如,如果用户选择中文,就加载"chinese.dll",选择英文则加载"english.dll"。在`CMultilanguageApp::InitInstance()`方法中,我们使用`LoadLibrary`函数加载相应的DLL,并通过`AfxSetResourceHandle`设置资源句柄,从而改变资源的搜索顺序,使得MFC框架首先从DLL中查找资源。 具体代码如下: ```cpp BOOL CMultilanguageApp::InitInstance() { AfxEnableControlContainer(); if (m_bChinese) { m_hLangDLL = ::LoadLibrary("chinese.dll"); } else { m_hLangDLL = ::LoadLibrary("english.dll"); } AfxSetResourceHandle(m_hLangDLL); // 其他初始化代码... } ``` 之后,当需要加载字符串、图标等资源时,MFC会优先从设置的DLL中查找,而不是从主程序的资源中获取,实现了国际化功能。 在DLL中,你可以添加各种语言的资源,如字符串资源(使用`LoadString`函数),对话框资源,图标资源等。每个语言对应一个DLL,这样就可以轻松地切换到不同语言环境,而无需重新编译整个应用程序。 总结,利用VC++纯资源DLL解决国际化问题,主要步骤包括创建不含资源的主工程、创建含特定语言资源的DLL、在主工程中动态加载和设置资源句柄。这种方法虽然需要手动管理多个DLL,但它避免了为每种语言版本编译单独的可执行文件,极大地提高了软件的可维护性和灵活性。对于需要支持多语言的MFC应用,这是一种实用且经济的解决方案。