Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
ВнизПеременная в классе Найти похожие ветки
← →
Micah'GF (2003-08-20 10:58) [0]Когда пытаюсь использовать переменную Handle то вылетает исключение
"Exception EAccessViolation ... Access violation at address ..."
Что можно сделать???
Делаю так:
tUFF = class
Handle: integer;
private
public
procedure Open(FileName: string);
procedure Close;
end;
← →
Skier (2003-08-20 11:00) [1]
> то вылетает исключение
> "Exception EAccessViolation ... Access violation at address
> ..."
Где вылетает ?
← →
Юрий Федоров (2003-08-20 11:01) [2]А объект создал?
Если да, то приведи 17 строку
← →
Palladin (2003-08-20 11:01) [3]стопудово объект не создан
← →
Vlad (2003-08-20 11:02) [4]Как ты используешь эту переменную ? (Код)
← →
Digitman (2003-08-20 11:15) [5]
> Когда пытаюсь использовать переменную Handle
Handle - это не переменная, а поле (член) класса. Разница весьма существенная.
нельзя обратиться к полю объекта как экземпляра класса без указания конкретного существующего (!) экземпляра класса.
убедись, что объект (экземпляр класса) создан на момент обращения к его полю Handle
← →
Micah'GF (2003-08-20 12:45) [6]
tUFF = class
Handle: integer;
private
public
procedure Open(FileName: string);
procedure Close;
end;
Var
UFile: tUFF;
procedure tUFF.Open(FileName: string);
begin
UFile.Handle := FileOpen(FileName, fmOpenReadWrite);
end;
вылетает в процедуре...
как правильно сделать??
← →
Юрий Федоров (2003-08-20 12:57) [7]кто такой UFile?
Сдается мне, что он тут не нужен, просто
Handle := FileOpen(FileName, fmOpenReadWrite);
← →
Vlad (2003-08-20 12:58) [8]>>UFile.Handle := FileOpen(FileName, fmOpenReadWrite);
Ufile. - не надо. Просто Handle.
← →
Skier (2003-08-20 13:03) [9]procedure tUFF.Open(FileName: string);
begin
Handle := FileOpen(FileName, fmOpenReadWrite);
end;
Ну...в крайнем случае так :
procedure tUFF.Open(FileName: string);
begin
Self.Handle := FileOpen(FileName, fmOpenReadWrite);
end;
:)
← →
Micah'GF (2003-08-20 15:25) [10]эээээ не UFile не должно быть ... опечатка..
Варианты:
Handle := FileOpen(FileName, fmOpenReadWrite);
Self.Handle := FileOpen(FileName, fmOpenReadWrite);
дали только одно изменение: Раньше Access violation вылетало при записи в адрес 0000030, с такими вариантами в 0000004...
Пробовал перемещать переменную в раздел private и в public - никаких изменений...
tUFF = class
Handle: integer;
private
public
procedure Open(FileName: string);
procedure Close;
end;
Var
UFile: tUFF;
procedure tUFF.Open(FileName: string);
begin
Handle := FileOpen(FileName, fmOpenReadWrite);
end;
Функции Open и Close вызываются нормально.
Что еще можно сделать??
← →
Palladin (2003-08-20 15:29) [11]ну ты создал или не создал объект, вот это мне не понятно
← →
Skier (2003-08-20 15:29) [12]>Micah"GF (20.08.03 15:25) [10]
> Что еще можно сделать??
1) Почитать книжки
2) Создать экземпляр класса
var
AUFF : tUFF;
begin
AUFF := tUFF.Create;
try
//................
AUFF.Open("Required_File_Name");
//................
finally
AUFF.Free;
end; //try
end;
← →
Юрий Федоров (2003-08-20 15:29) [13]var UFile: tUFF;
..
UFile:=tUFF.Create;
...
UFile.Open("c:\myFile.ext");
...
UFile.Free;
поле Handle помести в private, хотя на Access violation это не виляет - просто стиль нужно блюсти :-)
← →
KSergey (2003-08-20 15:31) [14]Функции Open и Close вызываются нормально.
Нормально - это как? Хорошо бы еще код, в которм это все вызывается, т.е. где работа с объектом класса происходит.
← →
Digitman (2003-08-20 15:32) [15]
> Пробовал перемещать переменную в раздел private и в public
>
чем-то мне это напоминает известную басню ИванАндреича)
тот самый "Access Violation at address XXXXXXXX ...." дает достаточную инф-цию для обнаружения причины отказа.
На то есть меню "Search | Find Error ..", вызвав которое (после запуска пнриложения, собранного с опциями встр.отладки) и введя тот самый адрес XXXXXXXX, ты будешь поставлен отладчиком в известность, при выполнении какой конкретно строки твоего исх.текста происходит это исключение.
Отсюда и пляши, раз мыслей нет никаких)
← →
Vlad (2003-08-20 15:33) [16]То что Handle нужно без UFile писать - это 100%
А где у тебя в коде UFile:=tUff.Create ?
← →
PVOzerski (2003-08-20 15:37) [17]>То что Handle нужно без UFile писать - это 100%
В сущности, и с UFile трабла быть не должно, при условии, что UFile - СОЗДАННЫЙ вызовом конструктора объект класса tUff. Иное дело, что такой код малоуниверсален: если вы захотите создать еще экземпляры этого же класса и даже его наследников, результат выполнения этого кода может получиться забавный.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.016 c