Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TObject через ссылку [XP]


Страницы:   1 2

aka ©   (2015-03-11 12:58:00) 

SL: TStringList;
................................................................
Push(Pointer(SL.Objects[i]));
//SL.Objects[i] := TObject(3) - напрямую работает

//так - нет
procedure Push(obj: Pointer);
begin
 TObject(obj) := TObject(3);
end;


Почему так происходит?


Юрий Зотов   (2015-03-20 18:30:00) [1]

Это будет адрес поля, естественно. Но получаем мы адрес этого поля именно как адрес свойства.


Palladin   (2015-03-20 12:54:00) [2]

Но это будет не адрес свойства


Юрий Зотов   (2015-03-19 10:11:00) [3]

icWasya ©   (16.03.15 09:24) [21]

Можно, если это свойство имеет прямой доступ по чтению.


icWasya   (2015-03-16 09:24:00) [4]

Повторяю ещё раз
брать адрес свойства НЕЛЬЗЯ.


Германн   (2015-03-14 03:20:00) [5]

Удалено модератором


Palladin   (2015-03-13 16:02:00) [6]

в свойстве ничего не содержится, его можно считать макроподстановкой


Rouse_   (2015-03-13 12:18:00) [7]


> Нет бы сказать что те 4 байта, которые содержатся в свойстве
> Objects - это просто 4 байта

А это не 4 байта, это либо 4 либо 8 байт :)


Ega23   (2015-03-13 08:13:00) [8]


> Сергей, а какие еще варианты? Поделитесь...


Пара ID-Caption например. До дженериков - сплошь и рядом.


Германн   (2015-03-13 03:09:00) [9]


> Rouse_ ©   (12.03.15 21:29) [15]
>
> Давайте "это" рассматривать просто как число :)
>

Ну вот опять некоторые запрещают мне "рассматривать это" как мне вздумается. :)
Нет бы сказать что те 4 байта, которые содержатся в свойстве Objects - это просто 4 байта, которые всяк может использовать/трактовать как он хочет.
Единственное замечание. Речь идет о Паскале. А он очень требователен к типам параметров/переменных.


Rouse_   (2015-03-12 21:29:00) [10]

Давайте "это" рассматривать просто как число :)


Германн   (2015-03-12 21:27:00) [11]


> Dennis I. Komarov ©   (12.03.15 15:37) [13]
>
> Сергей, а какие еще варианты?

Любые. Порядковый номер чего-либо. Количество чего-либо. Номер правильного ответа. И т.д. и т.п.


Dennis I. Komarov   (2015-03-12 15:37:00) [12]

Сергей, а какие еще варианты? Поделитесь...


Германн   (2015-03-12 00:34:00) [13]

А где видно что эта тройка используется именно как адрес?


Dennis I. Komarov   (2015-03-11 23:11:00) [14]

Вот она, где утечка памяти)))


Rouse_   (2015-03-11 23:02:00) [15]

Технически все адреса от нуля до 65535 являются областью битых указателей (первая стопка страниц памяти) поэтому, в данном случае не волшебство - а просто чудо какой адрес :)


Dennis I. Komarov   (2015-03-11 22:56:00) [16]

Просветите темного, а адрес "3" это некое волшебство, или результат генерации больного воображения?


Rouse_   (2015-03-11 19:54:00) [17]

А почему так не должно происходить?
Давай посмотрим на твой код:

procedure Push(obj: Pointer);
begin
TObject(obj) := TObject(3);
end;


Здесь некая переменная obj присваивается тройке.
Ну присвоили и присвоили, а дальше что с ней делать?
Передай ее по ссылке - уже будет цимус, но нет - тыж ее по значению кидаешь.


> Тут вопрос не в этом... В Objects[i] не присваевается значение
> через ссылку, как писал в кусочке кода.

А знаешь почему?
А потому что не читаем мы мануалы - лишнее оно для нас, вот так не хотим писать: Push(@P); - но я знаю, что читать мануалы нужно, важно и тщательно, желательно каждый день перед началом работы программистом (нам же за эту работу деньги платят - за то что мы такие умные :)


junglecat   (2015-03-11 14:25:00) [18]

> В Objects[i] не присваевается значение

почему бы не так тогда?
function Push: TObject;
begin
Result := TObject(3);
end;

SL.Objects[i] := Push;


icWasya   (2015-03-11 14:24:00) [19]

На проперти нельзя взять ссылку.


aka   (2015-03-11 14:07:00) [20]


> Плохиш ©   (11.03.15 13:56) [4]


Спасибо тебе за наука, о всезнающий гуру.

> junglecat ©   (11.03.15 13:53) [3]
>
> P := Pointer(SL.Objects[i]);
> Push(P);


Тут вопрос не в этом... В Objects[i] не присваевается значение через ссылку, как писал в кусочке кода.


> Плохиш ©   (11.03.15 13:56) [4]


А, и не забудь еще написать, что слово "присваевается"  выше написано с ошибкой.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо