下面的代码很简单,就是从注册表中读取一个二进制的数据,但是总是出现非法错误,为什么,如何解决?
var
  reg:tregistry;
  buf:array of byte;  //动态数组
begin
  reg:=tregistry.Create;
  reg.RootKey:=HKEY_CURRENT_USER;
  setlength(buf,4);  //设置动态数组的长度
  try
  if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
    if reg.ValueExists('NoDriveTypeAutoRun') then
      reg.ReadBinaryData('NoDriveTypeAutoRun',buf,sizeof(buf));
  finally
    setlength(buf,0);    //在这儿出现错误,
    reg.Free;        //如果把上面的去掉,这儿会出现错误。
  end;
end;那么该如何读取二进制的数据?    
回复贴子: 
 Kingron(WinAPI) 回复于2001-2-17 13:14:00 得0分  
救命啊!
问题提前  
 Kingron(WinAPI) 回复于2001-2-17 13:38:00 得0分  
看的人多,回答的人少,分数应该不少了啊?  
 lwm8246(lwm8246) 回复于2001-2-17 14:25:00 得20分  
试试:var
  reg:tregistry;
  buf:array of byte;  //动态数组
begin
  reg:=tregistry.Create;
  reg.RootKey:=HKEY_CURRENT_USER;
  setlength(buf,4);  //设置动态数组的长度
  try
  if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
    if reg.ValueExists('NoDriveTypeAutoRun') then
    //  reg.ReadBinaryData('NoDriveTypeAutoRun',buf,sizeof(buf));
      reg.ReadBinaryData('NoDriveTypeAutoRun',buf[1],sizeof(buf));
  finally
    setlength(buf,0);    //在这儿出现错误,
    reg.Free;        //如果把上面的去掉,这儿会出现错误。
  end;
end; 
 AllError(错误大全) 回复于2001-2-17 14:43:00 得0分  
用reg.GetDataType('NoDriveTypeAutoRun');可知'NoDriveTypeAutoRun'
不是二进制的而是integer型的所以应是var
  reg:tregistry;
  buf:array of byte;  //动态数组
  i:integer;
  s:TRegDataType;
begin
  reg:=tregistry.Create;
  reg.RootKey:=HKEY_CURRENT_USER;
  setlength(buf,10);  //设置动态数组的长度
  try
  if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
    if reg.ValueExists('NoDriveTypeAutoRun') then
    begin
    s:=reg.GetDataType('NoDriveTypeAutoRun');
    i:=reg.readinteger('NoDriveTypeAutoRun');
    end;
  finally
    setlength(buf,0);  
    reg.Free;
  end;
end;  
 Kingron(WinAPI) 回复于2001-2-17 16:46:00 得0分  
2 lwm8246(lwm8246) :
  英雄所见略同!呵呵,但是我急昏了头,急着提了问题,后来自己搞定了!你的方法是正确的,不过要指出的是,不是从[1]开始,应该从[0]开始!
同样给分。  
 lwm8246(lwm8246) 回复于2001-2-17 22:57:00 得0分  
不好意思。谢谢指教.  
 lwm8246(lwm8246) 回复于2001-2-17 22:58:00 得0分  
不好意思。谢谢指教.