Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.59 MB
Время: 0.042 c
1-1195132473
DerbyW
2007-11-15 16:14
2008.06.22
Генерация интерфейсов для WebService(SOAP) на основании WSDL


2-1211881680
123-ий
2008-05-27 13:48
2008.06.22
Заголовок окна


15-1210756224
User1
2008-05-14 13:10
2008.06.22
Как программно выключить сервер ?


3-1200900133
MZ
2008-01-21 10:22
2008.06.22
Тип данных в Firebird


2-1211652384
programmer90
2008-05-24 22:06
2008.06.22
Free Pascal на Delphi -"поймать и удержать"





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