替换资源字符串--可能很简单,也可能是根本无法解决的问题(200分)

  • 主题发起人 主题发起人 蜀子
  • 开始时间 开始时间

蜀子

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望在程序运行时动态替换资源字符串,通过写API钩子函数实现(LoadStringA),<br>原理如下:<br>&nbsp; 因为访问资源字符串时,系统最后总要通过API函数LoadString完成,所以API钩子函<br>数中先通过原来的API读回字符串,然后与外部文件中定义的串比较,如果设置了新串,<br>让LoadString返回这个新串。<br>&nbsp; 程序在中文Windows下一切OK,但在英文版中运行结果不正确,调试发现在英文版中,<br>LoadString读回的中文资源串长度少了一半,均以?显示,导致在与外部文件中字符串<br>比较不对,所以没有替换。<br>&nbsp; 请问该怎么解决?<br>哦,程序在英文Windows中重新编译后就正常了,但回到中文环境下又不正确。<br>
 
试试给资源定义LanguageID看有没有效果,中文(简体)为2052,英语(美国)为1033
 
pihome:<br>&nbsp; 能具体点吗?<br>
 
说说看吧!不要保守嘛!
 
是语言的问题,先分析当前的WINDOW版本,再载入相应的语言就OK了
 
这不就是动态汉化吗<br>汉化时<br>英文改中文要对齐,否则加空格好了<br>不行就不能改
 
用 eXescope 或 ResHacker 之类的修改一下资源的语言试试看
 
我看还是Unicode转换的问题,因为程序是在中文环境下编译的,资源串以Unicode存在于<br>EXE中,在英文Windows中运行时LoadStringW返回的串和外部文件中(另一个文本文件)中<br>存放的源串比较总是不对。分析后发现在文本文件中的源串在内存中是以内码形式存在,<br>而EXE中的资源串以WideChar存在,那么这两者之间应该怎样转换呢?<br>&nbsp; 试了用WideCharToString和StringToWideChar函数转换,但结果还是不对。所以我怀疑<br>这两个函数是与本地字符集有关的,那么程序可不可以自行设置这个字符集呢?<br>&nbsp; 另外,源程序在英文WIN中编译后,EXE中的资源串也以WideChar存放,但它是汉字内码,<br>所以用WideCharToString转换后可以得到正确的串。但我不能总是将我的程序放在英文下<br>重新编译吧?<br>各位请继续支招。<br>
 
delphi/demos/richeidt下有个多语言的例子,参考一下吧!
 
其实真的很简单,关键是WideCharToMultiByte的第一个参数要传入正确的代码页<br>
 
OK,谢谢各位
 
分被自己又收回去了<br>喝喝<br>大大的狡猾
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部