新年快乐
谁知道吗,cstring的函数中没有这个功能的?
谢谢。

解决方案 »

  1.   

    参考UpdateResource、BeginUpdateResource、EndUpdateResource函数。
    这三者只适用于NT内核的操作系统。
      

  2.   

    refer to the following
    http://codeguru.earthweb.com/misc/resources.htmlwhat is more
    MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicodehttp://codeguru.earthweb.com/mfc/comments/48025.shtml
      

  3.   

    CSDN上好像有关于用代码读写PE资源的文章,你可以找一找。
      

  4.   

    是写rc文件吗,这个我正在摸索
    但是,我需要在程序运行时动态改变string table的值,改rc估计还不成
    难道只有loadstring函数,没有setstring函数之类的吗?
      

  5.   

    : masterz(MS MVP) 
    你说的那个地址我看了,不是说有bug的吗,好像还不少,难道vc没有提供这个功能吗?
      

  6.   

    我把程序发给你了,直接修改dll,exe文件的字符串资源的
    快点给分吧!
      

  7.   

    不明白楼主的意思,不过好像楼上的诸位倒像是都很清楚.string table在程序编译完毕后就是放在数据段的,和一般的字符常量并无区别,为什么要动态修改?举例来说,如有
    STRINGTABLE DISCARDABLE 
    BEGIN
        IDS_MYSTRING "Hello World"
    END在程序中则有
    char buf[256];
    LoadString(hInst,IDS_MYSTRING,buf,256);如要动态,那么就有
    if( this is my condition)
    {
       set IDS_MYSTIRNG as "No sense"
    }char buf[256];
    LoadString(hInst,IDS_MYSTRING,buf,256);那么No Senese还是一个字符串常量,和原来的Hello World是同样放在常量及静态变量区的,这又有什么意义呢?不如
    STRINGTABLE DISCARDABLE 
    BEGIN
        IDS_MYSTRING "Hello World"
        IDS_YOURSTRING "No Sense"
    ENDchar buf[256];
    if( this is my condition)
       LoadString(hInst,IDS_MYSTRING,buf,256);
    else
       LoadString(hInst,IDS_YOURSTRING,buf,256);如果说楼主要改的是别人已编译完的DLL,那么如楼上所说,用VC6.0打开那个DLL,然后直接把hello world改成no sense就可以了,根本也不用动态不动态一说啊!
      

  8.   

    set IDS_MYSTIRNG as "No sense"
    这个语句什么意思,是在程序里定义一个contant string IDS_MYSTIRNG,程序以后loadstring(IDS_MYSTIRNG) 就会取这个直吗?
    好象不是这样的啊我的意思是,在程序运行以后再修改string table的值,或者你让loadstring()得到的结果可以改变也是一样的,直接改exe或者dll的resource,我是知道的,但这也是写死了。
      

  9.   

    做多语言版本扩展方便,把各个语言的描述都放在一个表里,程序运行时再动态读这个表,更新程序中显示的字符。
    这样以后维护或扩充界面文字的话,只要修改这个表,相应的多语言界面也就随之变化了。
    现在知道在程序运行时怎么改控件和对话框,菜单,就是不知道怎么改string table和hint。
      

  10.   

    多语言版本不是这样做的,通常的做法是: 最好将所有的资源都集中到一个DLL中,然后根据语言的不同,将其localize成数个dll.在调用程序中根据语言的不同调用不同的DLL(其内容是基本相同的,只是UI不同).
      

  11.   

    ÄÇ还不如把表对应一个文件(ini,xml),直接从文件读入。
      

  12.   

    Cline(营营) :
    你说的东西我没有接触过,能给我具体介绍一下吗?
      

  13.   

    简单一点地说,可以自已写个LoadString(),从某个文本文件中读取数据即可,这样你就可以把文本文件给"行业专家",让他们自由地在文本文件中发挥.
      

  14.   

    Cline(营营) :
    谢谢你的代码,以后会给分的,不过你的代码和我的要求不一样,你是跳过了loadstring,用自己的方法读文件再取到程序里用而已。而程序里很多处都用到了loadstring函数。
    Zark(金陵五月) :
    因为程序里是用的cstring的loadstring方法,不是::loadstring方法,所以自己写个loadstring程序中也不会直接调用这个程序。
      

  15.   

    hibird(********) :好办。1。做一张表(全局):表有两列 ID,string. 程序开始时,从文件读出字符,填充此表。
    2。写一个全局函数,LoadString(UINT ID)。根据ID,从表中取出string.
    3。Replace all ".LoasString" with "=::LoadString".--------------
    为了提高查找速度。填充时,对表排序。 查找用折半查找。
      

  16.   

    这是最后一招了,呵呵,我也想过,不过我想的是用
    =函数名( 替换 .loadstring(
    就是说
    s.loadsting(id)就变成了s=函数名(id)

    但我只是奇怪难道string table真的没办法运行中修改吗,vc也不至于这么土吧
      

  17.   

    VC不土,是楼主的要求忒怪异,替换的方法还可以是CMyString: public CStringoverwrite LoadString()函数.然后
    #define CString CMyString