MFC DLL (二) 之纯资源,多语言的实现

来源:互联网 发布:淘宝店铺转让流程图 编辑:程序博客网 时间:2024/06/05 06:51

参考:http://blog.csdn.net/wangjieest/article/details/7022348


一、创建主工程

1.MFC Application-> MultiLanguage

2.Next-> Application type: Dialog based; Use of MFC: Use MFC in a shared DLL-> Finish

3.Remove 而不是 Delete, Resoure.h, Resource Files 中的所有文件


二、创建DLL (chinese, english)

1.在主工程目录下添加 MFC DLL-> chinese, english 两个 DLL 项目 (也可以在其他地方添加,如果在其他地方添加,最后要复制 .dll 文件到主工程中)

2.Next-> DLL type: Regular DLL using shared MFC DLL-> Finish

3.在两个 DLL 项目中 Delete, Resoure.h, Resource Files 中的所有文件

4.将主工程中Remove 的文件添加到两个 DLL 项目中

5.修改界面中的显示语言,中文的 DLL 显示中文,英文的  DLL 显示 英文 (注意 resource.h 等资源的同步)

6.分别编译两个 DLL 项目


三、主工程

在 CMultilanguageApp 类中添加如下的成员变量:

private:BOOL m_bChinese;HINSTANCE m_hLangDLL;


构造函数中初始化:

[cpp] view plain copy
  1. CMultilanguageApp::CMultilanguageApp()  
  2. {  
  3.     m_bChinese = TRUE;  
  4.     m_hLangDLL = NULL;  
  5. }         


在InitInstance()函数修改资源加载顺序:

[cpp] view plain copy
  1. BOOL CMultilanguageApp::InitInstance()  
  2. {  
  3.     AfxEnableControlContainer();  
  4.   
  5.     if (m_bChinese)  
  6.     {  
  7.         m_hLangDLL=::LoadLibrary(L"chinese.dll");  
  8.     }  
  9.     else  
  10.     {  
  11.         m_hLangDLL=::LoadLibrary(L"english.dll");  
  12.     }  
  13.   
  14.     AfxSetResourceHandle(m_hLangDLL);  
  15.   
  16.     ……  
  17. }  

别忘了ExitInstance()函数释放掉加载的dll资源

[cpp] view plain copy
  1. int CMultilanguageApp::ExitInstance()  
  2. {  
  3.     if(m_hLangDLL)  
  4.         AfxFreeLibrary(m_hLangDLL);  
  5.     return CWinApp::ExitInstance();  
  6. }         


最后编译运行!