Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-10653
AGAMEMNUM
2003-08-12 12:39
2003.09.04
Две транзакции


14-10899
Феликс
2003-08-15 21:26
2003.09.04
Почему мы не живем своей жизнью?


3-10602
Марат
2003-08-15 13:50
2003.09.04
F1Book


3-10650
Ден
2003-08-12 13:22
2003.09.04
Как получить доступ к записям сетки DBgrid?


3-10619
Rel_
2003-08-13 09:16
2003.09.04
запрос SQL





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