多语言的实现

来源:互联网 发布:淘宝怎样才能货到付款 编辑:程序博客网 时间:2024/06/04 23:27

多语言的实现不是个新鲜的话题,简单的做一下整理。实现多语言的方式有通常下面几种:
1,资源文件,动态实现多语言,需要重新启动程序
2,从文件加载语言,完全动态实现多语言,不需要重新启动程序
3,编译时用不同的头文件包含不同的语言,实现编译级别上的多语言,每一次编译都能生成一种语言的可执行文件

下面介绍下用资源文件实现多语言的一些需要注意的地方
1,如何开始?
  1,新建一个工程NewProject,正常编码和编译(假如它的资源文件为NewProject.rc resource.h)
  2,将资源文件独立出来成为纯资源dll,需要进行如下的步骤
    a,NewProject的ResourceView中,选取一个对话框资源,右键选择Insert Copy...,在弹出的对话框中,选择一种你需要的语言(这里选择English(U.S)),经过这一步后,多语言的资源文件已经有了,只是没有把它分离出来了
    b,将资源文件独立为纯资源dll
      i,新建一个Win32 DLL工程NewProjectResEng,添加NewProject.rc和resource.h到NewProjectResEng
      ii,更改NewProjectResEng的编译选项
         a,在Project/setting/Resources/Preprocessor definitions:中增加AFX_RESOURCE_DLL,AFX_TARG_ENU
         b,在Project/setting/link/Project Options:中增加/noentry
  经过以上的步骤,已经产生了纯资源dll,下面需要动态加载资源
  3,程序中动态加载资源文件
    一,可用LoadLibrary来将资源文件加载到内存,二,用AfxSetResourceHandle来设置资源文件
  经过以上步骤,就能动态加载资源文件,就能实现多语言了。

2,与实现多语言中一些相关知识
  2.1,在mfc的扩展dll中是不能实现动态加载资源dll的,如果加载会出现ASSERT,在扩展dll中能够加载activex控件
  2.2,可以在mfc的常规dll中动态加载资源dll,但需要注意的是,在某个导出函数前要添加AFX_MANAGE_STATE(AfxGetStaticModuleState());
  3.3,如果需要动态加载activex和资源dll应该怎么办?
       暂时还不知道怎么解决,如果不行,就只有换个方式来实现多语言,如上面所叙的方法2,方法3应该都可以

 

原创粉丝点击