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

Вниз

TXMLDocument в RUNTIME   Найти похожие ветки 

 
jack128_   (2008-05-26 17:08) [40]


> дык я ж сказал

это бесполезно ;-)


 
ага0   (2008-05-26 17:10) [41]


> jack128_   (26.05.08 17:08) [40]


> это бесполезно ;-)

Понял - отстал:)


 
Reindeer Moss Eater ©   (2008-05-26 17:10) [42]

Да по барабану что и кто там мне вернул.
Я этот результат нигде не использую и в x остался тот самый "обычный объект"
Я же не результат AddChild передаю через LParam.


 
Reindeer Moss Eater ©   (2008-05-26 17:11) [43]

это бесполезно ;-)

Будет полезно, если скажешь причину AV.


 
Reindeer Moss Eater ©   (2008-05-26 17:13) [44]

Либо вот это объясни:

When TXMLDocument is created without an Owner, it behaves like an interfaced object.


 
Reindeer Moss Eater ©   (2008-05-26 17:19) [45]

Главное, что ты вызвал метод, который вернул интерфейс(IXMLNode), в Release этого интефейса и будет уничтожен документ.  

На помедитируй:
Интерфейс освобождается, документ живет.

procedure TForm1.Button1Click(Sender: TObject);
var x : TXMLDocument;
begin
x := TXMLDocument.Create(Self);
x.Active := True;
x.Encoding := "windows-1251";
x.AddChild("root");
PostMessage(Handle,WM_USER,1000,LParam(x));
end;

procedure TForm1.OnMyMsg(var Msg: TMessage);
begin
if Msg.WParam = 1000 then ShowMEssage(TXMLDocument(Msg.LParam).XML.Text);
end;


 
ага0   (2008-05-26 17:27) [46]


> Либо вот это объясни:
>
> When TXMLDocument is created without an Owner, it behaves
> like an interfaced object.

Лана, последняя попытка уж извини.
"Когда TXMLDocument создается без владельца, он ведет себя как обычный объект, резализующий какой-нито интерфейс". Типа в отличии от TComponent, который пилиет на всякий подсчет сцылок. А сказано затем, что TXMLDocument - потомок TComponent и логично ожидать о нево того-ж поведения. Вот вони и указали - гляди, не нарвись!

А "фич" от дельфийской помощи в работе с интерфейсами у мене - полный чумудан.


 
ага0   (2008-05-26 17:30) [47]


> Reindeer Moss Eater ©   (26.05.08 17:19) [45]


> На помедитируй:


> x := TXMLDocument.Create(Self);

Фсе, ты меня добил. Пожалте в сад - там хорошо, там яблоки. гуд бай. май фрэнд.


 
Reindeer Moss Eater ©   (2008-05-26 17:37) [48]

Вот вони и указали - гляди, не нарвись!

Ну ты догада. А я что говорил здесь всю дорогу?

Главное, что ты вызвал метод, который вернул интерфейс(IXMLNode), в Release этого интефейса и будет уничтожен документ.  

Ага. В среду будет уничтожен, а если в четверг и луна в первой четверти то нет.

Пожалте в сад - там хорошо

Ага. А вам на йух.


 
Reindeer Moss Eater ©   (2008-05-26 17:46) [49]


> Reindeer Moss Eater ©   (26.05.08 17:19) [45]

> На помедитируй:

> x := TXMLDocument.Create(Self);

Фсе, ты меня добил. Пожалте в сад - там хорошо, там яблоки. гуд бай. май фрэнд.


Ты это своему коллеге скажи, который объясняет AV только тем, что был интефейс и он при смерти убивает документ.

Я привел два случая, в одном убивает, в другом нет.
Почему?

Да потому что (в сотый раз):

When TXMLDocument is created without an Owner, it behaves like an interfaced object.


 
sniknik ©   (2008-05-26 17:48) [50]

> Вот вони и указали - гляди, не нарвись!
т.е. указали, и в хелпе записал а на самом деле это не так?

конкретная проверка, включаешь в опциях проекта "use debug dcus", в модуле XMLDoc ставишь точку останова на строке
destructor TXMLDocument.Destroy;
begin
 Destroying; //сдесь например
 if FOwnerIsComponent and Active and Assigned(FDocumentNode) and (FRefCount > 1) then
   (FDocumentNode as IXMLNodeAccess).ClearDocumentRef;
 SetActive(False);
 FreeAndNil(FXMLStrings);
 inherited;
end;


выполняешь код, в двух вариантах (nil/Self).
procedure TForm1.Button1Click(Sender: TObject);
var x : TXMLDocument;
begin
 x := TXMLDocument.Create(nil/Self);
 x.Active := True;
 x.Encoding := "windows-1251";
 x.AddChild("root");
end;


говоришь в какой момент вызывается "дестрой" в обоих случаях.

(после можно убрать x.AddChild("root");, и повторить. и попробовать обьяснить разницу... хотя бы самому себе)


 
ага0   (2008-05-26 18:04) [51]


> sniknik ©   (26.05.08 17:48) [50]

>>>т.е. указали, и в хелпе записал а на самом деле это не так?
А такое заключение интересно откуда?
Ну хорошо - я дурак. Объясни мне, дурню, почему это, если "возвращается чисто интерфейсная ссылка а не объектная" (c) Reindeer Moss Eater ©   (24.05.08 14:37) [8], то деструктор не вызывается в варианте Reindeer Moss Eater ©   (24.05.08 14:48) [10], хотя по утверждению в
Reindeer Moss Eater ©   (26.05.08 14:37) [30]
вызываться должен. И ведь должен, если ссылка интерфейсная. И почему он не вызывается в варианте Reindeer Moss Eater ©   (26.05.08 14:51) [31] , если закомментировать строку x.AddChild("root"); - ну ведь должен-же, раз ссылка интерфейная.

> (после можно убрать x.AddChild("root");, и повторить. и
> попробовать обьяснить разницу... хотя бы самому себе)

Да себе-то я уж да-а-вным-давно объяснил. И другим здесь пытался. Но кому не дано - тому не дано, тут уж я бессилен.


 
sniknik ©   (2008-05-26 18:16) [52]

> если закомментировать строку x.AddChild("root"); - ну ведь должен-же, раз ссылка интерфейная.
он и вызывается. но только не в дельфи коде, а в интерфейсе. дельфевский деструктор нужен только после того как появились обьекты в обьекте, очистить их (ClearDocumentRef).


 
ага0   (2008-05-26 18:31) [53]


> он и вызывается. но только не в дельфи коде, а в интерфейсе

Деструктор в интерфейсе - это ново. В общем с тобой тож все ясно, в саду места много, всем хватит


 
sniknik ©   (2008-05-26 20:07) [54]

> Деструктор в интерфейсе - это ново.
ну прямо мастер придирок... скажем по другому тогда. вызывается то, что вызывается при обнулении счетчика ссылок на обьект и уничтожающий(но не называющийся деструктором борцами за точность формулировок) его... вот то что там вызывается то и вызывается. (про это говорилось и имелось ввиду)

лучше скажи чем опыты кончились.  и как обьяснил?


 
ага0   (2008-05-26 21:01) [55]


> sniknik ©   (26.05.08 20:07) [54]

Ты мя извини, но ет на бред похоже.

> вызывается то, что вызывается при обнулении счетчика ссылок
> на обьект и уничтожающий(но не называющийся деструктором
> борцами за точность формулировок) его

Ты об чем? Нетути у интерфейса никакого волшебного кода - вот что написано в объекте ентот интерфейс реализующем, то и вызывается. Интерфейс - ваще абстракция, без всякого кода. Если ет интерфейс реализован TXmlNode, то че написано в TXmlNode._addref и TXmlNode._Release, то и вызывается. Буде то код в самом объекте аль унаследованный от предка. И не волшебным образом эти функции вызываются, а компилятором подставляется - о нас, сирых, заботится. блин. Вызывается, если ссылка интерфейсная - все, без всяких вариантов. Конструктор объектов таковую не возвращает в принципе.

> лучше скажи чем опыты кончились

Да ничем они не кончились - делать мне нефиг акромя как детскими играми заниматься. А ет я сотни раз делал и знаю как отче наш. И че там будет я уже  в [36] и [38] заяснил. Читай вникай, не поймешь еще читай. Вкури разницу промеж

procedure A1;
var
 Doc: IXmlDocument;
begin
 Doc:= TXmlDocument.Create(nil);
end;

procedure A2;
var
 Doc: TXmlDocument;
begin
 Doc:= TXmlDocument.Create(nil);
end;

Чистый код, без побочных фефектов.
Поймешь почему по выходе из A1 TXmlDocument.Destroy вызывается, а по выходе из A2 нет, поймешь и остальное. Типа надеюсь. А пережевывать элементарщину мне надоело.


 
sniknik ©   (2008-05-26 21:30) [56]

> Чистый код, без побочных фефектов.
ага, проверяем
procedure A1;
var
Doc: IXmlDocument;
begin
Doc:= TXmlDocument.Create(self);
end;

procedure A2;
var
Doc: TXmlDocument;
begin
Doc:= TXmlDocument.Create(self);
end;

о чем и речь. только знаки спутаны, кто и что не понимает.


 
sniknik ©   (2008-05-26 21:36) [57]

p.s. только не надо увиливаний, смены темы и т.д.  просто скажи
> по выходе из A1 TXmlDocument.Destroy вызывается
с self в create дестрой вызывается? ... а ведь интерфейс. по твоему обязан.


 
sniknik ©   (2008-05-26 21:38) [58]

приведение типа это еще не все, чтобы поменялось поведение, надо еще смотреть как оно написано, то что приводится.


 
jack128_   (2008-05-26 22:27) [59]

ужос..я б сказал круче, но всё потрут модеры.  

два мастера (я и сникник), 1 старожил (RME) + 1 аноним (ага0) про которого я 10 k 1 дам, что это один из мастеров под фальш. ником в течении целого дня обсуждают банальный ТЕХНИЧЕСКИЙ вопрос.  Это писец полный!!!!....Full arctic fox


 
jack128_   (2008-05-26 22:28) [60]

конфа называется «Начинающим» !!!!


 
ага0   (2008-05-27 04:46) [61]

2 sniknik ©

> с self в create дестрой вызывается? ... а ведь интерфейс.
>  по твоему обязан

Абзац, приплыли. Нет, не вызовется. И не должон. С какого перепугу ты взял что "по твоему обязан" я без понятия. Ты ветку перечитай хотяб с 10-го поста, вынимательно. Именно с 10-го - с него началось. На 30-й пристально глянь. Можа поймешь об чем речь шла


 
sniknik ©   (2008-05-27 08:52) [62]

> Именно с 10-го - с него началось.
нет, имхо, началось все с
jack128_   (26.05.08 10:54) [14]
> это с каких пор конструктор стал возвращать интефейсные ссылки ???
именно с него Reindeer Moss Eater пытался обьяснить вам разницу в созданием TXMLDocument с nil и self. разницу которая действительно есть, и по которой код в [10] вполне нормален, интерфейс там действительно освободится сам обнулением при выходе из области видимости, и потому если nil то free (на что ты похоже так коряво намекаешь) не нужен. освободится сам, без вызовов дельфевского кода, внутренним "релизом".
во всяком случае, именно это написано в хелпе (см. приведенные выдержки).
а разница в созданиях подтверждается эксперементально (повесить брекпоинт на на релиз внутри обьекта не представляется возможным. поэтому верим хелпу). чего вам (вместе с jack128_) еще надо, к чему придирки, не пойму... вот если бы ты без намеков, прямо сказал в чем претензия... но это не твой стиль верно?


 
jack128_   (2008-05-27 09:52) [63]


> [10] вполне нормален, интерфейс там действительно освободится
> сам обнулением при выходе из области видимости, и потому
> если nil то free (на что ты похоже так коряво намекаешь)
> не нужен. освободится сам, без вызовов дельфевского кода,
>  внутренним "релизом".

где ты в коде [10] увидел интерфейс ???

Ладно, хрен с ним, с xml document"ом.

Вот код:
begin
 TInterfacedObject.Create;
end;


Как ты считаешь - будет уничтожен объект "внутренним релизом" ???


 
sniknik ©   (2008-05-27 10:36) [64]

> где ты в коде [10] увидел интерфейс ???
не в коде, сдесь
TXMLDocument = class(TComponent, IInterface, IXMLDocument, IXMLDocumentAccess)

> Как ты считаешь - будет уничтожен объект "внутренним релизом" ???
а ты проверь, я же не предлагал поверить. см. sniknik ©   (26.05.08 17:48) [50]
или ты как и ага0 не занимаешься "детскими играми" ака "проверками"  ([55])?

по коду, обязательно ->
function TInterfacedObject._Release: Integer;
begin
 Result := InterlockedDecrement(FRefCount);
 if Result = 0 then
   Destroy;
end;


 
ага0   (2008-05-27 10:51) [65]


> sniknik ©   (27.05.08 08:52) [62]


> (повесить брекпоинт на на релиз внутри обьекта не представляется
> возможным. поэтому верим хелпу).

С чего вдруг? Нормально вешается. В чем проблема?

> и по которой код в [10] вполне нормален, интерфейс там действительно
> освободится сам обнулением при выходе из области видимости,
>  и потому если nil то free

Ну так возьми и зупасти его. Поставь бряк в деструктор и запусти, без лишних слов.

> на что ты похоже так коряво намекаешь

Корявость у тя в мозгах. И походу беспросветная


 
sniknik ©   (2008-05-27 10:52) [66]

> по коду, обязательно ->
хотя нет, извини ошибся, в данном коде он не уничтожится т.к. не будет даже создан. ты привел абстрактный класс.


 
jack128_   (2008-05-27 11:04) [67]


> т.к. не будет даже создан. ты привел абстрактный класс.

Ну собсвенно вот всё и видно, кто запускал код, а кто  - нет.


 
ага0   (2008-05-27 11:16) [68]

2 jack128_

Ты был стопудово прав када сказал что объяснять беспонтово.



Страницы: 1 2 вся ветка

Текущий архив: 2008.06.22;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.021 c
8-1182311899
Ryden
2007-06-20 07:58
2008.06.22
mp3 player


2-1211988642
Smile
2008-05-28 19:30
2008.06.22
Отменить Font.Style


1-1194937505
DancerMan
2007-11-13 10:05
2008.06.22
Обмен значениями элементов ListView


15-1210094937
SKIPtr
2008-05-06 21:28
2008.06.22
нет спящего режима на компе


2-1211805768
opoloXAI
2008-05-26 16:42
2008.06.22
CF_Text и CF_Bitmap вместе