Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

Переменная в классе   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
4-11027
BPK
2003-07-01 00:52
2003.09.04
Как правильно делать в Unicode константы и переменные?


3-10583
Fants
2003-08-14 11:33
2003.09.04
Вид курсора


3-10623
Balabolkin
2003-08-07 18:25
2003.09.04
Про VirtualTable из ODAC


3-10564
denick
2003-08-15 11:04
2003.09.04
Вопрос по Rave5.


1-10744
Jacob
2003-08-18 12:23
2003.09.04
Сделать невидимым столбец в TListView