var
reg:tregistry;
p:integer;
len:integer;
begin
  reg:=tregistry.Create;
  reg.RootKey:=hkey_local_machine;  try
  reg.OpenKeyreadonly('SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation') ;  len:=reg.GetDataSize('DisplayParams');  
   getmem(p,len);
   reg.ReadBinaryData('DisplayParams',p,len);
    
  finally
   freemem(p);
   reg.CloseKey;
   reg.Free;
  end;
end;
///////////////////////////////////
这几句话没做什么检测,因为那个键和那个值的确存在,并且是rdbinary类型的!
///////////////////////////////////
只要运行reg.ReadBinaryData('DisplayParams',p,len);
就有异常,请问为什么?怎样才能正常读取??

解决方案 »

  1.   

    var
    reg:tregistry;
    len:integer;
    p:PByte;
    DataInfo:TRegDataInfo;
    begin
      reg:=tregistry.Create;
      reg.RootKey:=hkey_local_machine;
      reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation',False);
      try
        Reg.GetDataInfo('DisplayParams',DataInfo);
        getmem(p,DataInfo.DataSize);
        reg.ReadBinaryData('DisplayParams',p^,DataInfo.DataSize);
      finally
        freemem(p);
      end;
      reg.CloseKey;
      reg.CloseKey;
      reg.Free;
    end;
      

  2.   

    //有点小错误,改下!
    var
    reg:tregistry;
    len:integer;
    p:PByte;
    DataInfo:TRegDataInfo;
    begin
      reg:=tregistry.Create;
      reg.RootKey:=hkey_local_machine;
      reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation',False);
      try
        Reg.GetDataInfo('DisplayParams',DataInfo);
        getmem(p,DataInfo.DataSize);
        reg.ReadBinaryData('DisplayParams',p^,DataInfo.DataSize);
      finally
        freemem(p);
        reg.CloseKey;
        reg.Free;
      end;
    end;