Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

Реестр   Найти похожие ветки 

 
Gek1   (2005-03-04 14:29) [0]

Почему программа вываливаеться с ошибкой:
"Project Project1 raised exception class EAbstractError with message "Abstract Error""

Сам код:

var Reg : TRegistry;
   Values : TStrings;
begin
{Открываем нужную ветку в реестре}
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Values := TStrings.Create;
if REG.OpenKey("Software\Test",false) then Reg.GetValueNames(Values);
Values.Free;
{Закрываем ветку в реестре}
Reg.CloseKey;
Reg.Free;


В реестре ветка существует и для теста кинул туда 1 строковую переменную.
После ошибки компилятор указывает на строку:
if REG.OpenKey("Software\Test",false) then Reg.GetValueNames(Values);


 
begin...end ©   (2005-03-04 14:33) [1]

> Gek1   (04.03.05 14:29)

> Values := TStrings.Create

Values := TStringList.Create


 
Gek1   (2005-03-04 14:42) [2]

Работает, но почему с TStrings неработает?

В справке написано:
procedure GetValueNames(Strings: TStrings);

И в чем разница между Strings и StringList?


 
Игорь Шевченко ©   (2005-03-04 14:42) [3]

Почему help не читаешь ?


 
Gek1   (2005-03-04 14:45) [4]


> Игорь Шевченко


Так там так и написано:
procedure GetValueNames(Strings: TStrings);

Написали бы:
procedure GetValueNames(Strings: StringList);
и вопросов бы небыло!


 
Anatoly Podgoretsky ©   (2005-03-04 14:52) [5]

В справке написано правильно, откуда ты взял что конструктор и формальные параметры это одно и тоже. Снова перечитать справку, в части Create и около.


 
begin...end ©   (2005-03-04 14:58) [6]

> Gek1   (04.03.05 14:42) [2]

> И в чем разница между Strings и StringList?

Разница в том, что TStrings является базовым классом и содержит абстрактные методы, т.е. методы, которые в этом классе объявлены, но НЕ реализованы. Такие методы должны перекрываться в потомках (в потомках должна быть указана их реализация). Вот TStringList является потомком TStrings, в котором эти самые абстрактные методы перекрыты.

Например, вот как объявлен метод TStrings.Clear (см. модуль Classes):

TStrings = class(TPersistent)
public
 procedure Clear; virtual; abstract;
end.


В строке Reg.GetValueNames(Values) Вы передаёте в метод GetValueNames экземпляр абстрактного класса Values: TStrings. Теперь давайте посмотрим, что происходит внутри этого метода (реализацию метода можно найти в модуле Registry):

procedure TRegistry.GetValueNames(Strings: TStrings);
var
 ...
begin
 Strings.Clear;
 ...
end.


В выделенной строке вызывается метод TStrings.Clear, а ведь он как раз является абстрактным, т.е. у него НЕТ реализации! Поэтому и происходит ошибка.

И поэтому в качестве параметра в метод TRegistry.GetValueNames можно передавать любой потомок базового класса TStrings, в котором эти абстрактные методы перекрыты - реализованы.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
3-1108965710
xOn
2005-02-21 09:01
2005.03.20
Создание БД


1-1109911641
rosl
2005-03-04 07:47
2005.03.20
проверка папки


6-1105603415
Artem Osipov
2005-01-13 11:03
2005.03.20
Протокол обмена между VNC сервером и клиентом


14-1108543241
WondeRu
2005-02-16 11:40
2005.03.20
Все статьи DelphiWorld в 20Мб!!! Качать!!!


1-1109951793
rolex
2005-03-04 18:56
2005.03.20
Нужны функции Удаления, Удаления в Корзину и перемещения файла!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский