写的程序所有的文字都做成了资源。想实现多语言,觉得用资源DLL最现实。查了很多文章,现在的想法是这样:做资源DLL,其中只放字符串表。程序从资源DLL中加载字符号串表,来读取所有的文字。现在的问题是:
1、用资源DLL可以动态变换语言吗?
2、EXE文件加载资源是不是先查自己,再查DLL?用AfxSetResourceHandle就可以改变查找顺序?那我想查找字符串表的时候查找DLL,查找其他资源的时候还是从本身找,如何实现呢?谢谢。

解决方案 »

  1.   

    手头有一个压缩包:程序实现多国语言的动态切换解决方案.zip
    如果需要,留下EMAIL,并给个短信
      

  2.   

    可以。你首先查找EXE,再查DLL,看看MFC的源代码就明白了。
    http://community.csdn.net/Expert/topic/3296/3296255.xml?temp=.1762201
      

  3.   

    楼主也可以阅读一下界面库BCG的代码,会有不小的收获的。
      

  4.   

    http://www.ddvip.net/program/vc/index2/img/MultiLanguage_Source.zip
      

  5.   

    谢谢大家。鹦鹉大哥说的是不是用.bin的文件来实现动态切换的?这段我也有:)。因为我的程序已经写完,所以界面上文字的读取是通过CString的LoadString,从字符串表加载的。采用那种方法改动太大了:(,所以我觉得用资源DLL比较现实。关于资源DLL加载,我的想法是这样,不知道可不可以:在程序最初初始化时,先用AfxSetResourceHandle把第一查找变成DLL。这样用CString的LoadString从字符串表加载时就先找DLL了;而我其他资源,比如对话框,图标等等,我还希望用EXE本身的,这样的话如果我不把资源句柄换回EXE的,程序会不会出错?不知道有没有解释清楚:)
      

  6.   

    你现在的是不是用Dll作的串,如果不是那就很麻烦
    如果是的话,可以用下面的办法(有可能你反对)
    作多个Dll,每个Dll是一种语言的,相同的ID号,每个Dll种都有,
    在你的Exe初始化时判断要用的语言,根据不同的语言LoadLibrary不同的Dll文件
    再不用改别的
      

  7.   

    呵呵,楼上的,其实我的想法就是这样的:)我所说的动态就是用户在菜单上选择某种语言后直接就可以显示出来。我想知道的是,变换DLL后,直接用Invalidate来刷新可不可以?