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
不明白楼主的意思,不过好像楼上的诸位倒像是都很清楚.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就可以了,根本也不用动态不动态一说啊!
set IDS_MYSTIRNG as "No sense" 这个语句什么意思,是在程序里定义一个contant string IDS_MYSTIRNG,程序以后loadstring(IDS_MYSTIRNG) 就会取这个直吗? 好象不是这样的啊我的意思是,在程序运行以后再修改string table的值,或者你让loadstring()得到的结果可以改变也是一样的,直接改exe或者dll的resource,我是知道的,但这也是写死了。
这三者只适用于NT内核的操作系统。
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
但是,我需要在程序运行时动态改变string table的值,改rc估计还不成
难道只有loadstring函数,没有setstring函数之类的吗?
你说的那个地址我看了,不是说有bug的吗,好像还不少,难道vc没有提供这个功能吗?
快点给分吧!
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就可以了,根本也不用动态不动态一说啊!
这个语句什么意思,是在程序里定义一个contant string IDS_MYSTIRNG,程序以后loadstring(IDS_MYSTIRNG) 就会取这个直吗?
好象不是这样的啊我的意思是,在程序运行以后再修改string table的值,或者你让loadstring()得到的结果可以改变也是一样的,直接改exe或者dll的resource,我是知道的,但这也是写死了。
这样以后维护或扩充界面文字的话,只要修改这个表,相应的多语言界面也就随之变化了。
现在知道在程序运行时怎么改控件和对话框,菜单,就是不知道怎么改string table和hint。
你说的东西我没有接触过,能给我具体介绍一下吗?
谢谢你的代码,以后会给分的,不过你的代码和我的要求不一样,你是跳过了loadstring,用自己的方法读文件再取到程序里用而已。而程序里很多处都用到了loadstring函数。
Zark(金陵五月) :
因为程序里是用的cstring的loadstring方法,不是::loadstring方法,所以自己写个loadstring程序中也不会直接调用这个程序。
2。写一个全局函数,LoadString(UINT ID)。根据ID,从表中取出string.
3。Replace all ".LoasString" with "=::LoadString".--------------
为了提高查找速度。填充时,对表排序。 查找用折半查找。
=函数名( 替换 .loadstring(
就是说
s.loadsting(id)就变成了s=函数名(id)
了
但我只是奇怪难道string table真的没办法运行中修改吗,vc也不至于这么土吧
#define CString CMyString