Глюк с Variant в Delphi

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Глюк с Variant в Delphi

Сообщение mr.denton » 17.10.2006 17:48:18

Сразу прошу прощения за то, что пост не посвящен fpc, но возможно это касается и его.

Мне потребовалось хранить ссылку на объект в вариантной переменной. Это можно легко сделать, если привести указатель на объект к типу integer и присвоить это значение варианту. Однако встала задача удалять объект хранящийся в варианте. И тут уже проблемы, так как невозможно определить, действительно ли вариант хранит указатель, или это посто число. Выход был найден в ручной правке типа варианта. Собственно код:
Код: Выделить всё
program class_variant;

{$APPTYPE CONSOLE}

uses
  Variants;

var
  varTmp: Variant;
  objTmp: TObject;
begin
  // создаем
  objTmp:=TObject.Create;
  TVarData(varTmp).VType:=vtClass;
  TVarData(varTmp).VPointer:=objTmp;
  // получаем
  writeln(TObject(TVarData(varTmp).VPointer).ClassName);
  // удаляем
  TObject(TVarData(varTmp).VPointer).Free;
  // объект по прежнему существует ?
  writeln(objTmp.ClassName); // да!
  writeln(TObject(TVarData(varTmp).VPointer).ClassName); // да?!! ...
  readln;
end.

Объект хранится, к его полям и методам есть доступ, но вызов метода Free не работает. Почему? Я не могу это объяснить.

Кстати, в справке по Delphi черным по белому написано, что тип Variant не предназначен для хранения классов и указателей, но зачем тогда vtPointer, vtObject и vtClass? что то ту Borland темнит...
Аватара пользователя
mr.denton
новенький
 
Сообщения: 23
Зарегистрирован: 30.04.2006 03:23:07

Сообщение mr.denton » 18.10.2006 19:36:06

Вопрос снят.
Я таки понял что происходит.
Объект на самом деле удаляется, но оказывается в Delphi можно вызывать методы у объектов, даже если их значение равно nil.
Всем спасибо.
Аватара пользователя
mr.denton
новенький
 
Сообщения: 23
Зарегистрирован: 30.04.2006 03:23:07


Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru