荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: oopilix (优雅的), 信区: Visual
标  题: [vc]基于 MFC 的组件的本地化
发信站: 荔园晨风BBS站 (Tue Aug 26 16:01:19 2003), 站内信件

        在VC 5.0中实现基于MFC的组件的本地化 Visual C++(以下简称VC)是微软公司的
Visual 系列软件开发工具之一。对非英语地区的程序员,不可避免地要解决软件的
本地化问题。
        VC 本身就支持多语种编程,给本地化带来了极大的方便。这里我们
主要讨论基于 MFC 的组件的本地化。 要实现那些使用 MFC 的组件的本地化,需要
解决下面两个问题。
        组件本身的本地化 第一问题是,要实现组件本身的一些特殊
资源的本地化,例如字符 串、对话框等等。由于大多数在 MFC 基础上构架的组件
也包含和使 用了一部分由 MFC 定义的资源,所以必须同时本地化这些 MFC 资源

       幸运的是,MFC 本身已提供了多种语言的本地化版本,它们包括:汉 语、德语、西
班牙语、法语、意大利语、日语和韩国语。存在于VC光 盘中相应的 DevStudi
VCMFC[src|include]l.xxx 目录下," l "代表"本地化"的意思 ,"l.chs"即代表简
体中文。将这些目录下的* .rc 文件拷入硬盘中相应的目录即可。当应用程序与
MFC之间采用静 态链接的模式时应采用该方法,但它只在VC 5.0的专业版与企业版
中 才支持。 大多数的应用程序与MFC之间采用动态链接的方式,这时在Win95 的
system目录下必须有相应的MFC 资源 DLL 文件的本地版本——MFC 4xLOC.
DLL(Pwin95 OEMSR2版本提供的是MFC0 LOC.DLL)。将VC光盘的目录
DevStudioVCRedist 中的文件:MFC42xxx.DLL 拷贝入Pwi95 的system目录下,并更
名为:MFC42LOC.DLL即可(其中MFC42CHS.DLL即 代表简体中文版的资源 DLL 文件)
。拷入前除了要解决同名DLL相覆 盖的版本问题外,
还应注意以下两方面的内容
   首先,不应该在英文版的系统(如英文 Win95)上安装 MFC4xLOC.D LL。因为英文版的
资源文件代码已内建于MFC4x.DLL 中,应用程序从M FC4x.DLL 中载入代码的速度比
从 MFC4XLOCD LL 中先搜寻再载入代 码的速度要快得多。
   其次,由于有多个版本
的 MFC4xLOC.DLL ,在VC光盘的目录 DevS tudioVCRedist 中可同时找到如:
MFC4xCHS.DLL——简体中文版本 、MFC4xDEU.DLL——德国版本、MFC4xESP.LL——
意大利版本等等。 所以在安装之前 ,应先确定所安装的MFC4xLOC.DLL 的本地版本
代 号与所使用的Window 系统是否相一致,例如:只有MFC42CHS.DLL 才能 安装在
Pwin95 的系统上。 需要指出的是,以上的方法会给应用程序的安装带来一定的复
杂 性,因为用户的系统下可能会安装多种本地化版本的应用程序。例如: 支持简体
中文;后来又装了一个日文版的软件而链接库文件MFC4xLOC.DLL 只有一个, 若后者
覆盖了前者,应用程序运行时就会发生资源链接 出错。所以我们建议采用另一种方
法,即建立自己的本地版本的MFC 资源 DLL 文件,而不是直接调用MFC4xLOC.DLL 文
件,该方法后面会继 续分析。 处理代码 第二个问题是,应处理好各组件本地化资
源的代码,使之能良好地 运行于目标环境。大多数情况下,这依赖于应用程序对字
节的高位及 双字节字符的处理能力。在缺省情况下,MFC对它们直接支持。 所以,
本地化应用程序和DLL实质上只需用本地语言改写相应的资 源即可。如果C++源代
码中不带有需要本地化的字符串或正文,那么只 需对资源文件作修改。实际上,用
户可以实现自己的组件,这样无须重 建原始代码即可获得本地版本。这或许很复杂
,但很值得 ,MFC本身也 采用这种技术。可打开资源文件编辑器直接用本地语言进
行编辑,但 这样每次版本的升级都需对应用程序进行重建。 注意:VC 4.0或以后的
版本直接支持多种语言的.RC文件。 避免这样做的一种方法就是建立一个分离的
DLL并对其进行本地 化,该 DLL 有时也叫做"卫星式 DLL"。在程序运行期间它将被
动态地 进行链接,此时资源将从这个"卫星式 DLL"载入,而不是从代码的主模 块载
入。MFC 直接支持这种方法,MFC4xLOC.DLL 本身就是一个本地化 的"卫星式
DLL",只不过是在缺省状况下是由 MFC 提供的。我们可以 建立一个自己的"卫星式
 DLL",如有一名为MYAPP.EXE 的应用程序,它 的所有资源全来源于一个叫做
MYRES.DL 的文件。
   这些都在其应用程 序的 InitInstance 事件中完成,如下所示:
 CMyApp::InitInstance() {  // 初始化代码的开始部分
HINSTANCE hInst = LoadLibrary("myres.dll");
if (hInst != NULL)
AfxSetResourceHandle(hInst); // 以下是其它初始化代码 . . . } 这段代码执
行后,MFC 将从 MYRES.DLL 中载入资源,而不是直接 从 MYAPP.EXE 中载入。 建立
一个单一的资源DLL文件并不难。先建立一个 DLL 项目文件 ,并加入.RC文件和其
他必要的资源,然后在链接器(Linker)的参数里 增加一个 "/NOENTRY"参数即可。
这个参数告诉链接器该 DLL 没有接 入点,因为资源 DLL 文件没有代码。 另外,若
应用程序以 Win32 Release 的方式建立(即EXE 文件中 不嵌入调试代码),则还需
完成以下步骤。在工程文件里,打开菜单 Projects/settings... ,分别选中 c/c++
 页和R esources页,将其中的 参数[ /D "_AFXDLL"]去掉(它一般由 AppWizard 自
动生成)。该参数 指定只从 MFC 的共享 DLL 文件中载入资源,而并不定义其他的
资源 来源,这样用户自己建立的资源 DLL 文件将不起作用。 最后,由于AppWizard
 是VC++的一大特色,VC++ 允许在使用AppWizard 创建基于MFC的应用程序框架时就
可以选择不同的语言,直接生 成本地化的程序框架。其中日文、韩文与简体中文,
由于需要支持双 字节版本的操作系统,所以在缺省情况下,与这三种远东语言相对
应的 MFC AppWizard DLLs并没有被VC 5.0的安装程序装入硬盘。因此,在 应用程
序生成向导的第一页下拉式列表框中,找不到这些语言条目,但 可以在VC光盘的
DevStudioSharedIDEBi IDE 目录中找到: 语言 AppWizard DLL
----------------------------------- 日文 ---- APPWZJPN.DLL 韩文 ----
APPWZKOR.DLL 简体中文 ---- APPWZCHS.DLL 在简体中文Pwin95下,只需将相应的
APPWZCHS.DLL 文件从VC光盘 拷贝入硬盘的 DevSu dioSharedIDEBinIDE 目录下即
可。这时," 简体中文"这一条目就会出现在应用程序生成向导的第一页下拉式列
表框中这样,AppWizard 生成的应用程序框架将自动包含简体中文的菜 单、标题、
状态栏等。我们将框架程序编译链接,运行后将会看到一 个漂亮的全中文界面。
所以,用VC制作简体中文的软件非常方便,感兴趣的朋友可以继续 查看VC帮助系统
,以获得更多的信息。
--

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.144.235.41]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店