![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 10
|
![]()
Всем привет
![]() Есть классы: Tsimple = class(Tobject) name : string; end; Tcontainer = class(Tsimple) private Fsimple_addr: ^Tsimple; function get_simple: Tsimple; procedure set_simple(Avalue:Tsimple); public constructor create; dynamic; property simple: Tsimple read get_simple write set_simple; end; Далее код var Form1: TForm1; Fsimple:Tsimple; Fvalue:Tsimple; Fcontainer:Tcontainer; implementation constructor Tcontainer.create; begin inherited create; Fsimple_addr :=nil; end; function Tcontainer.get_simple:Tsimple; begin if assigned(Fsimple_addr) and assigned(Fsimple_addr^) then result:=Fsimple_addr^ else result:=nil; end; procedure Tcontainer.set_simple(Avalue: Tsimple); begin if assigned(Avalue) then Fsimple_addr:=@Avalue else Fsimple_addr:=nil; showmessage(simple.name); end; procedure TForm1.FormCreate(Sender: TObject); begin Fsimple :=Tsimple.Create; Fcontainer :=Tcontainer.create; Fcontainer.simple :=Fsimple; end; Ну дык вот, при присваивании Fcontainer.simple :=Fsimple в поле записывается совсем не адрес Fsimple, возможно это адрес самой переменной Avalue исполльзующейся в set_simple. Как думаете, возможно ли при сохранинее структуры при присваивании получить в переменную Fsimple_addr: ^Tsimple адрес именно Fsimple? |
![]() |
![]() |
![]() |
#2 |
Кодер
Форумчанин
Регистрация: 27.01.2007
Сообщений: 271
|
![]()
Во первых ты забыл знак ^ во вторых зачем тебе объявлять новый класс с одной переменной и то не свойством
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 10
|
![]()
Где?
Да просто для наглядности. Естественно, пример не из рабочего кода. Как это не свойством? Именно property simple: Tsimple read get_simple write set_simple; и не хочет выдавать то, что мне нужно. Необходимо, что бы из поинтера(адреса) получалось свойство - объект Tsimple, а для этого необходимо, что бы в переменную Fsimple_addr записался адрес ИСКОМОГО объекта Fsimple, а записывается адрес переменной AValue. Так вот как получить, все таки, при текущей конструкции объекта нужный адрес, и является вопросом. |
![]() |
![]() |
![]() |
#4 |
Кодер
Форумчанин
Регистрация: 27.01.2007
Сообщений: 271
|
![]()
Друг все работает как ты хочешь низнаю чего тебе еще надо я загрузил твой код себе ну единственное добавил строчку
FSimple.name:='fsdfsd'; перед Fcontainer.simple :=Fsimple; Адресация в таких случаях проходит на ура. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 10
|
![]()
Если не поленился себе залить код то не поленись сравнить адреса у созданного Fsimple и у ссылочного Fcontainer.simple. Ссылка приняла адрес Avalue, который отличается от Fsimple. И получить адрес ИСКОМОГО объекта таким образом невозможно
![]() Я уже разобрался в проблематике, если кому интересно могу поделиться. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
IP адрес | SERG1980 | Работа с сетью в Delphi | 2 | 25.07.2008 15:54 |
mac адрес | AvG | Компьютерное железо | 5 | 23.07.2008 10:52 |
Ip адрес | delphin100 | Win Api | 4 | 08.01.2008 21:55 |
IP адрес | delphin100 | Общие вопросы Delphi | 8 | 12.12.2007 13:18 |
как узнать ip адрес зная mac адрес | Roman | Работа с сетью в Delphi | 9 | 25.06.2007 12:39 |