procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  HisFileName: TStrings;
  i:Integer;
begin
  Reg := TRegistry.Create;
  HisFileName := TStrings.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey('\SoftWare\EasyNote\OpenHistory', True);
  Reg.GetKeyNames(HisFileName); //这一句总是报错,错误信息:“Abstract Error”
  for i := 0 to HisFileName.Count do
  begin
    ShowMessage(HisFileName.Strings[i]);
  end;
end;

解决方案 »

  1.   

    var
      DatabaseFile:String;
      Reg:TRegistry;
    begin
      try  // 取ODBC数据库文件
        Reg:=TRegistry.Create;
        Reg.RootKey := HKEY_CURRENT_USER;
        if Reg.OpenKey('Software\Odbc\Odbc.ini\Larpt',False) then
          DatabaseFile:=Reg.ReadString('DatabaseFile')
        else begin
          DatabaseFile:='';
        end;
      finally
        Reg.Free ;
      end;
      // ...
    end;
    上面是俺读ODBC源的代码,供参考。
      

  2.   

    “Abstract Error” 
    抽象类错误.不要用TStrings,用TStringList;var 
      Reg: TRegistry; 
      HisFileName: TStrings; 
      i:Integer; 
    begin 
      Reg := TRegistry.Create; 
      HisFileName := TStrings.Create; 
      Reg.RootKey := HKEY_CURRENT_USER; 
      Reg.OpenKey('\SoftWare\EasyNote\OpenHistory', True); 
      Reg.GetKeyNames(HisFileName); //这一句总是报错,错误信息:“Abstract Error” 
      for i := 0 to HisFileName.Count do 
      begin 
        ShowMessage(HisFileName.Strings[i]); 
      end; 
    end;
      

  3.   

    忘了把Tstrings改为TStringList;   楼主改过来就行了。
    HisFileName: TStringList; 
    HisFileName := TStringList.Create;还有这里 for i := 0 to HisFileName.Count - 1 do