我用如下代码修改一DLL中序列号为1的字符串内容:======================================================== Tempstr:string; SetLength(Tempstr,255); TempStr:='abcded'; UpdateResource(hUpdateRes,
RT_STRING,
MAKEINTRESOURCE(1),
MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),
@TempStr,
Length(TempStr)); =========================================================可是执行后,字符串内容变成了空,查了一些资料,都是讲RT_RCDATA方面的,修改RT_STRING方面的特少,有人说调用该API时,应将传给它的字符串转为Unicode格式,我试了,还是不行,请高手指点该如何解决,谢谢!
RT_STRING,
MAKEINTRESOURCE(1),
MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),
@TempStr,
Length(TempStr)); =========================================================可是执行后,字符串内容变成了空,查了一些资料,都是讲RT_RCDATA方面的,修改RT_STRING方面的特少,有人说调用该API时,应将传给它的字符串转为Unicode格式,我试了,还是不行,请高手指点该如何解决,谢谢!
解决方案 »
- hjy2 := inttohex(hjy,4); 的结果如果溢出了,那怎么取高字节和低字节啊?
- 一个简单的数据类型转换问题
- D2006中使用cxGrid不能用中文字段名称,已调入,IDE就退出了,郁闷呀
- dbgrid的输入法
- [散分]^_^
- 一个关于treeview的问题,大家帮忙解释一下:)
- 关于图形处理入门
- 需要急速解决的问题!请帮助!!!!!!
- 一个调查,给分200。(关心一下大家的健康状态,大家每天坐着,都锻炼不?)
- 关于dbgrideh控件中求和的问题!急!
- 我用delphi写的web程序怎么在IE里运行时,显示为一片空白
- 急!急!急!兄弟们,救命啦!数据库备份!在线等待!在线等待!在线等待!
var
hUpdateRes:THandle;
Getresult:Boolean;
pStr:PWidechar;
tmpStr:string;
begin tmpStr:='internet';
GetMem(pStr,Sizeof(widechar)*Length(tmpStr));
if pStr<>nil then
StringToWideChar(tmpStr,pStr,Sizeof(widechar)*Length(tmpStr)); hUpdateRes := BeginUpdateResource('c:\abc\project1.dll', False);
if (hUpdateRes =0 ) then Showmessage('Could not open file for writing.');
Getresult:=UpdateResource(hUpdateRes,
RT_STRING,
MAKEINTRESOURCE(1),
MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),
pStr,
Sizeof(widechar)*Length(tmpStr)
); if (Getresult=False) then Showmessage('Could not add resource.');
if ( Not EndUpdateResource(hUpdateRes, False)) then Showmessage('Could not write changes to file.'); FreeMem(pStr,Sizeof(widechar)*Length(tmpStr));end;=================================================================
以上代码经过跟踪,将ansi-string转为unicode是成功的,UpdateResource执行也通过,但序号为1的字符串的值写的还是不对,请高手给看看,我感觉离成功又近一步了 :)