怎么在程序中修改string table?

hibird 2003-02-06 02:42:55
新年快乐
谁知道吗,cstring的函数中没有这个功能的?
谢谢。
...全文
871 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zark 2003-02-12
  • 打赏
  • 举报
回复
VC不土,是楼主的要求忒怪异,

替换的方法还可以是

CMyString: public CString

overwrite LoadString()函数.

然后
#define CString CMyString
hibird 2003-02-11
  • 打赏
  • 举报
回复
这是最后一招了,呵呵,我也想过,不过我想的是用
=函数名( 替换 .loadstring(
就是说
s.loadsting(id)就变成了s=函数名(id)

但我只是奇怪难道string table真的没办法运行中修改吗,vc也不至于这么土吧
Cline 2003-02-11
  • 打赏
  • 举报
回复
hibird(********) :

好办。

1。做一张表(全局):表有两列 ID,string. 程序开始时,从文件读出字符,填充此表。
2。写一个全局函数,LoadString(UINT ID)。根据ID,从表中取出string.
3。Replace all ".LoasString" with "=::LoadString".

--------------
为了提高查找速度。填充时,对表排序。 查找用折半查找。
hibird 2003-02-11
  • 打赏
  • 举报
回复
Cline(营营) :
谢谢你的代码,以后会给分的,不过你的代码和我的要求不一样,你是跳过了loadstring,用自己的方法读文件再取到程序里用而已。而程序里很多处都用到了loadstring函数。
Zark(金陵五月) :
因为程序里是用的cstring的loadstring方法,不是::loadstring方法,所以自己写个loadstring程序中也不会直接调用这个程序。
Zark 2003-02-10
  • 打赏
  • 举报
回复
简单一点地说,可以自已写个LoadString(),从某个文本文件中读取数据即可,这样你就可以把文本文件给"行业专家",让他们自由地在文本文件中发挥.

hibird 2003-02-10
  • 打赏
  • 举报
回复
hibird@163.com
谢谢。
Cline 2003-02-10
  • 打赏
  • 举报
回复
email,
hibird 2003-02-10
  • 打赏
  • 举报
回复
Cline(营营) :
你说的东西我没有接触过,能给我具体介绍一下吗?
Cline 2003-02-10
  • 打赏
  • 举报
回复
ÄÇ还不如把表对应一个文件(ini,xml),直接从文件读入。
Zark 2003-02-09
  • 打赏
  • 举报
回复
多语言版本不是这样做的,通常的做法是: 最好将所有的资源都集中到一个DLL中,然后根据语言的不同,将其localize成数个dll.在调用程序中根据语言的不同调用不同的DLL(其内容是基本相同的,只是UI不同).
hibird 2003-02-09
  • 打赏
  • 举报
回复
我知道能这样做,但这个是个行业软件,界面上牵涉很多术语,软件人员是不知道准确的表述的。如果做到表里,界面改变的时候,可以让行业人士直接修改表,而不需要软件人员的参与,程序直接读这个表就好了,这样界面的扩展性就会好很多。
Zark 2003-02-08
  • 打赏
  • 举报
回复
不明白楼主的意思,不过好像楼上的诸位倒像是都很清楚.

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"
END

char 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就可以了,根本也不用动态不动态一说啊!

Kiloy 2003-02-08
  • 打赏
  • 举报
回复
干吗用啊,郁闷
hibird 2003-02-08
  • 打赏
  • 举报
回复
set IDS_MYSTIRNG as "No sense"
这个语句什么意思,是在程序里定义一个contant string IDS_MYSTIRNG,程序以后loadstring(IDS_MYSTIRNG) 就会取这个直吗?
好象不是这样的啊

我的意思是,在程序运行以后再修改string table的值,或者你让loadstring()得到的结果可以改变也是一样的,直接改exe或者dll的resource,我是知道的,但这也是写死了。
hibird 2003-02-08
  • 打赏
  • 举报
回复
做多语言版本扩展方便,把各个语言的描述都放在一个表里,程序运行时再动态读这个表,更新程序中显示的字符。
这样以后维护或扩充界面文字的话,只要修改这个表,相应的多语言界面也就随之变化了。
现在知道在程序运行时怎么改控件和对话框,菜单,就是不知道怎么改string table和hint。
ni_ch 2003-02-07
  • 打赏
  • 举报
回复
我把程序发给你了,直接修改dll,exe文件的字符串资源的
快点给分吧!
hibird 2003-02-06
  • 打赏
  • 举报
回复
: masterz(MS MVP)
你说的那个地址我看了,不是说有bug的吗,好像还不少,难道vc没有提供这个功能吗?
hibird 2003-02-06
  • 打赏
  • 举报
回复
是写rc文件吗,这个我正在摸索
但是,我需要在程序运行时动态改变string table的值,改rc估计还不成
难道只有loadstring函数,没有setstring函数之类的吗?
titi_lima 2003-02-06
  • 打赏
  • 举报
回复
CSDN上好像有关于用代码读写PE资源的文章,你可以找一找。
masterz 2003-02-06
  • 打赏
  • 举报
回复
refer to the following
http://codeguru.earthweb.com/misc/resources.html

what is more
MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicode

http://codeguru.earthweb.com/mfc/comments/48025.shtml
加载更多回复(3)

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧