如果读取资源中的字符串? ( 积分: 100 )

  • 主题发起人 主题发起人 l0v3_y1n9
  • 开始时间 开始时间
L

l0v3_y1n9

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:RT_RCDATA类型下,有一名为LOVE的资源,里面存放着字符串"I Love DelphiBBS!",那如何实现读取出来呢?以及删除这个资源呢?
 
从资源中读取字符串:<br>var&nbsp;<br>&nbsp;&nbsp;puffer:&nbsp;array[0..255]&nbsp;of&nbsp;char;&nbsp;<br>begin&nbsp;<br>&nbsp;&nbsp;LoadString(hinstance,1,@puffer,255);&nbsp;&nbsp;//1&nbsp;=&nbsp;第一个字符串<br>&nbsp;&nbsp;label1.Caption:=strpas(puffer);&nbsp;<br>end;&nbsp;<br><br>删除资源必须重新制作资源文件并重新编译。
 
[:(]<br>大哥,你用LoadString好象不能吧?
 
为什么做字符串资源的时候不用ResourceString??<br>Resourcestring<br>&nbsp;&nbsp;&nbsp;g_srsc_text1&nbsp;=&nbsp;'the&nbsp;string&nbsp;made&nbsp;in&nbsp;resource!';<br><br>不过删除字符串资源应该是很困难的,
 
LoadString不能?为什么?<br>我是测试通过的。你为什么不试试呢?
 
对了,你是用&nbsp;RT_RCDATA类型,那就应该:<br>资源文件内容:<br>strs&nbsp;RCDATA&nbsp;&quot;strs.txt&quot;<br>strs.txt&nbsp;文件内容:<br>strs&nbsp;RCDATA&nbsp;&quot;I&nbsp;Love&nbsp;DelphiBBS!&quot;<br>程序代码:<br>var<br>&nbsp;&nbsp;FStream&nbsp;:&nbsp;TResourceStream;<br>begin<br>&nbsp;&nbsp;&nbsp;FStream&nbsp;:=&nbsp;TResourceStream.Create(Hinstance,'strs',RT_RCDATA);<br>&nbsp;&nbsp;&nbsp;Memo1.Lines.LoadFromStream(FStream);<br>&nbsp;&nbsp;&nbsp;FStream.Free;<br>end;
 
...<br>&nbsp;&nbsp;&nbsp;[^]<br>to:kaida<br>用资源流去载入,这点我也想过,不过我的程序是用纯SDK写的,不希望添加Classes等单元,这样会导致程序体积很肥...可不可以用某些操作资源的API写呢?主要是想读取资源内的字符串而已..<br>&nbsp;&nbsp;删除资源我实现了,不过删除后,用ResHacker的一些资源工具看,是不见了,但是程序体积一点也没有改变...我晕...[:(]
 
var<br>&nbsp;&nbsp;hRes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;THandle;<br>&nbsp;&nbsp;pRes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;pointer;<br>&nbsp;&nbsp;ResSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;longint;<br>&nbsp;&nbsp;i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;integer;<br>&nbsp;&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;shortstring;<br>begin<br>&nbsp;&nbsp;hRes&nbsp;:=&nbsp;FindResource(Hinstance,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'strs',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'MYDATATYPE');<br>&nbsp;&nbsp;if&nbsp;hRes&nbsp;=&nbsp;0&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage('找不到资源。');<br>&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;ResSize&nbsp;:=&nbsp;SizeOfResource(hinstance,&nbsp;hRes);<br>&nbsp;&nbsp;if&nbsp;ResSize&nbsp;=&nbsp;0&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage('没有资源载入&nbsp;-&nbsp;尺寸&nbsp;=&nbsp;0');<br>&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;hRes&nbsp;:=&nbsp;LoadResource(hInstance,&nbsp;hRes);<br>&nbsp;&nbsp;if&nbsp;hRes&nbsp;=&nbsp;0&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage('资源载入失败!');<br>&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;pRes&nbsp;:=&nbsp;LockResource(hRes);<br>&nbsp;&nbsp;if&nbsp;pRes&nbsp;=&nbsp;nil&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage('资源锁定失败!');<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeResource(hRes);<br>&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;{转换资源为字符串}<br>&nbsp;&nbsp;s:='';<br>&nbsp;&nbsp;i&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;while&nbsp;pChar(pRes)&nbsp;&lt;&gt;&nbsp;'!'&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:=&nbsp;s&nbsp;+&nbsp;pChar(pRes);<br>&nbsp;&nbsp;&nbsp;&nbsp;inc(i);<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;ShowMessage(s);<br><br>&nbsp;&nbsp;UnLockResource(hRes);<br>&nbsp;&nbsp;FreeResource(hRes);<br>end;
 
路过一哈!
 
呵,不错!谢谢了...[:D]<br>终于解决了,不过这句代码好象有点错..<br>while&nbsp;pChar(pRes)&nbsp;&lt;&gt;&nbsp;'!'&nbsp;do&nbsp;begin这段代码只读取到&quot;I&nbsp;Love&nbsp;DelphiBBS&quot;,少了一个感叹号&quot;!&quot;,改为while&nbsp;pChar(pRes)&nbsp;&lt;&gt;&nbsp;''&nbsp;do&nbsp;begin就可以全部读取...[8D]
 
后退
顶部