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

Вниз

Проблема при использовании LoadFromFile у TStrings   Найти похожие ветки 

 
Иванько   (2003-10-15 18:29) [0]

Фрагмент кода:

procedure TForm1.Button1Click(Sender: TObject);
var sss:Tstrings;
begin
opendialog1.Execute; sss.LoadFromFile(opendialog1.FileName);
end;
вызывает ошибку:

Debugger Exception Notification
Project Project1.exe raised exception class EAccessViolation with message "Access violation at address 004554B3 in module "PROJECT1.EXE". Read of address 8BD88BBB". Process stopped. Use Step or Run to continue.

в то же время RichEdit1.Lines.LoadFromFile или Memo1.Lines.LoadFromFile проходят без проблем. Пробовал вначале создать объект:
opendialog1.Execute; sss.Create; sss.LoadFromFile(opendialog1.FileName);
такой же результат. Компилировал под разными ОС (98, Ме, ХР) и разными версиями Delphi (6, 7) – не помогает. В справке про это ничего не сказано. Кто что может посоветовать????


 
Skier   (2003-10-15 18:31) [1]

Ну ё !

procedure TForm1.Button1Click(Sender: TObject);
var
sss:Tstrings;
begin
sss := TstringList.Create;
try
if opendialog1.Execute then
sss.LoadFromFile(opendialog1.FileName);
finally
sss.Free;
end; //try
end;


 
default   (2003-10-15 18:32) [2]

delphi uninstall, ИМХО


 
Иванько   (2003-10-15 18:34) [3]

Мы все учились понемногу.... (с) Пушкин.
А вообще биг сянкс!


 
default   (2003-10-15 18:52) [4]

Иванько © (15.10.03 18:34) [3]
вот тебе дали решение и ты успокоился...ты понял почему переменная объявлена как TStrings, а создаётся объект через ссылку на класс TStringList и это работает?!...


 
Иванько   (2003-10-16 18:39) [5]

Неа... Плиз, объясни!


 
AlexS   (2003-10-16 18:52) [6]

TStrings - полуфабрикат, базовый класс, у него многие методы абстрактные, поэтому лучше работать с TStringList.


 
default   (2003-10-16 18:54) [7]

Иванько © (16.10.03 18:39) [5]
моё личное убеждение в том, что чтобы до конца понять принцип работы объектов надо смотреть окно отладчика, то есть хоть чуть-чуть разбираться в ассемблерном коде
а так могу попробовать объяснить так:
использовать TStrings.LoadFormFile и большинство других методов этого класса нельзя, потому что они не определены в этом классе, а оставлены для определения в потомках, то есть TStrings является каркасом для них, чтобы меньше кода писать, а определять в наследниках этого класса то что надо или дополнить что-то(или изменить)
поэтому при вызове этих методов происходит Abstract Error(фактически на месте адреса кода метода лежит адрес кода процедуры обработки вот такого абстрактного вызова, которая и выводит текст об ошибке вызова),
присвоении sss := TstringList.Create вполне логично так как TStringList является потомком TStrings и в нём этот(и другие)
абстрактные методы определены, а компилятор "работает" с объектом через указатель на него, а указатель у нас на TStringList теперь хранится в переменной sss и поэтому всё чики пуки происходит, вот если понадобится вызвать "новые" методы TStringList придётся выполнять приведение к типу TStringList
не знаю понятно или нет, конечно, но всё же надеюсь не зря писал...


 
Иванько   (2003-10-16 19:11) [8]

вроде понятно... Пасибо, что вразумил! Я в принципе так и думал, но все равно толково и ястно рассказал!


 
mOOx_   (2003-10-16 19:44) [9]

Блин, когда-то и я так радовался. Правда откопал эту фишку в хелпах :). Всегда приятно, когда кто-то догоняет :). Удачи.



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

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

Наверх




Память: 0.46 MB
Время: 0.012 c
1-89263
Vadim S
2003-10-14 16:50
2003.10.27
Функция:String


14-89490
panov
2003-10-09 17:20
2003.10.27
Создание топиков, обращенных к определенному участнику форума


4-89648
jonni
2003-08-18 02:51
2003.10.27
подмена WndProc


1-89227
Juri
2003-10-15 11:24
2003.10.27
DBGrid & WebBrowser


4-89657
SanteR
2003-08-22 20:55
2003.10.27
Определение типа учетной записи в WinXP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский