困惑我一个下午的奇怪问题!(50分)

  • 主题发起人 主题发起人 whaoye
  • 开始时间 开始时间
W

whaoye

Unregistered / Unconfirmed
GUEST, unregistred user!
今天下午我写了一个程序,其中有一个片段是这个样子的:<br>主要是用来提取outlook express的默认用户的一些配置,<br>我这里提取smtp服务器和默认得用户email。<br>但是就是这里读注册表的时候出了问题!<br><br>procedure getdefaultsetting;<br>var<br>hk:hkey;<br>smtp,account:array[0..255] of char;<br>smtplen,accountlen:integer;<br>begin<br>RegOpenKey(HKEY_CURRENT_USER,'Software/Microsoft/Internet Account Manager/Accounts/00000001',hk);<br>RegQueryValueEx(hk,'SMTP Server',nil,nil,@smtp,@smtplen);<br>RegQueryValueEx(hk,'Smtp Email Address',nil,nil,@account,@accountlen);<br>end;<br><br>按道理来说,这段程序应该是没有错啊,<br>可是我在最后的end处下断点,<br>发现这个时候,成功的读取了smtp的默认配置,<br>但是读account的时候就不能读取正确得值。<br>并且,最奇怪得事情是,这个时候,smtplen和accountlen却是正确的值,<br>分别正好是注册表里该项值的正确长度,<br>如果从长度来看,那应该读取成功了啊,为什么accountlen的值却是错误的呢?<br><br>并且,我重新启动delphi后,有的时候是读取对了smtp的配置,有得时候却是account,<br>几乎没有出现同时两个都对的情况。<br><br>我又试着读其他的地方,<br>比如 software/microsoft/windows/currentversion/run<br>等其他的地方,<br>却可以成功的读取,难道是有什么限制吗?<br>实在是困惑到了极点,<br>整整一个下午都理不出一个头绪来,<br>所以还请高手赐教。
 
你没给SmtpLen, AccountLen 赋值么. 这样改<br>getdefaultsetting;<br>var<br>hk:hkey;<br>smtp,account:array[0..255] of char;<br>smtplen,accountlen:integer;<br>begin<br>SmtpLen := 255;<br>AccountLen := 255;<br>RegOpenKey(HKEY_CURRENT_USER,'Software/Microsoft/Internet Account Manager/Accounts/00000001',hk);<br>RegQueryValueEx(hk,'SMTP Server',nil,nil,@smtp,@smtplen);<br>RegQueryValueEx(hk,'Smtp Email Address',nil,nil,@account,@accountlen);<br>end;<br><br>
 
为什么呢?
 
我测试了,真的是这个样子,<br>为什么呢?<br>他不是传的var吗,为什么要先给他一个初值呢?<br>分数肯定给你了。
 
呵呵, 那个参数不是读出来的, 是你的缓冲区的长度, 要预先设定的.[:)]
 
谢谢,给分!
 
后退
顶部