Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизTXMLDocument в RUNTIME Найти похожие ветки
← →
Димон (2008-05-24 13:26) [0]Помогите разобраться ... Когда бросаю компонент TXMLDocument на форму и выполняю эту функцию, функция отрабатывает нормально. Когда убираю компонент из формы и создаю его в ручную, через XMLDoc := TXMLDocument.Create(nil) - То функция отрабатывает с ошибками ...
Ошибка при чтении записей ...
function fFinde (Value : WideString) : WideString;
Var
i:integer;
XMLDoc : TXMLDocument;
begin
try
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.LoadFromFile("C:\1.xml");
XMLDoc.Active := True;
for i := 0 to XMLDoc.ChildNodes["Records"].ChildNodes.Count - 1 do
begin
ShowMessage(XMLDoc.ChildNodes["Records"].ChildNodes[i].ChildNodes["Item"].Text);
end;
finally
XMLDoc.Free;
end;
end;
← →
sniknik © (2008-05-24 13:46) [1]> То функция отрабатывает с ошибками ...
ошибки они не просто так, в них обычно бывает указание чего неправильно/нехватает.
> XMLDoc := TXMLDocument.Create(nil);
посмотри исходники компонента, там 2 конструктора, причем второй введен для возможности создать компонент с владельцем = nil... (имхо, но по моему там это все очевидно)
← →
Димон (2008-05-24 13:56) [2]Да, 2 конструктора .. В моем случаи оба не работают ...
← →
Плохиш © (2008-05-24 13:56) [3]
> XMLDoc.LoadFromFile("C:\1.xml");
> XMLDoc.Active := True;
Советую всё-таки прочитать справку по LoadFromFile.
← →
Плохиш © (2008-05-24 13:57) [4]
> Димон (24.05.08 13:56) [2]
> Да, 2 конструктора .. В моем случаи оба не работают
тебе не повезло...
← →
Димон (2008-05-24 14:07) [5]Понял, XMLDoc := TXMLDocument.Create(Self);
Проблема решена ... ))
← →
sniknik © (2008-05-24 14:18) [6]> Да, 2 конструктора .. В моем случаи оба не работают ...
не может такого быть. может ты им зарплату не платишь? вот и не хотят работать. так и говорят - "не хотим работать"?
(судя по всему про написанное про ошибки было проигнорировано)
> Понял, XMLDoc := TXMLDocument.Create(Self);
> Проблема решена ... ))
хм... а от чего Self то? ->
> function <????.>fFinde (Value : WideString) : WideString;
нету.
я то как раз думал, что цель работать без владельца, т.к. это "чистая" функция а не метод класса.
← →
Димон (2008-05-24 14:20) [7]Да вы правы, я позже понял что владельца я немогу передавать .. Сейчас сижу не знаю что делать, читаю хелп но ничего не догоняю.
← →
Reindeer Moss Eater © (2008-05-24 14:37) [8]Хелп читать надо, вот что надо делать.
Если в конструктор передан нил то возвращается чисто интерфейсная ссылка а не объектная. И фри ей делать не надо.
← →
Димон (2008-05-24 14:43) [9]Решил проблему следующим извращенным методом, иначе ничего не придумал.
dm : TDataModule;
begin
try
dm:=tdatamodule.create(nil);
XMLDoc := TXMLDocument.Create(dm);
← →
Reindeer Moss Eater © (2008-05-24 14:48) [10]with TXMLDocument.Create(nil) do
begin
LoadFromFile("Дурилка ты картонная.xml");
ShowMessage(xml.Text);
end;
← →
sniknik © (2008-05-24 15:12) [11]> Reindeer Moss Eater © (24.05.08 14:48) [10]
или
with TXMLDocument.Create("Дурилка ты картонная.xml") do
ShowMessage(xml.Text);
← →
Димон (2008-05-24 15:25) [12]и как этот объект присвоить к переменной ?
← →
sniknik © (2008-05-24 15:45) [13]операция присвоения -
:=
← →
jack128_ (2008-05-26 10:54) [14]
> Если в конструктор передан нил то возвращается чисто интерфейсная
> ссылка
> with TXMLDocument.Create(nil) do
> begin
> LoadFromFile("Дурилка ты картонная.xml");
> ShowMessage(xml.Text);
> end;
>
это с каких пор конструктор стал возвращать интефейсные ссылки ???
← →
Reindeer Moss Eater © (2008-05-26 11:39) [15]А с таких вот пор.
← →
Reindeer Moss Eater © (2008-05-26 11:41) [16]When TXMLDocument is created without an Owner, it behaves like an interfaced object. That is, when all references to its interface are released, the TXMLDocument instance is automatically freed. When TXMLDocument is created with an Owner, however, it behaves like any other component, and is freed by its Owner.
← →
jack128_ (2008-05-26 11:56) [17]Чесно говоря не вижу, где тут написано что конструктор возвращает интефейсную ссылку. Если бы это было так, то при выполнении этого кода:
type
TXMLDocument_Test = class(TXMLDocument)
public
destructor Destroy; override;
end;
{ TXMLDocument_Test }
destructor TXMLDocument_Test.Destroy;
begin
ShowMessage("TXMLDocument_Test.Destroy");
inherited;
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
with TXMLDocument_Test.Create(nil) do
begin
end;
end;
Мы бы увидели сообщение "TXMLDocument_Test.Destroy" чего не наблюдается...
А вот если мы бы написали так:with TXMLDocument_Test.Create(nil) as IXMLDocument do
begin
end;
то это совершенно другое дело.
← →
Reindeer Moss Eater © (2008-05-26 12:05) [18]Если что-то ведет себя как интерфейсная ссылка, лает как интерфейсная ссылка и пахнет как интерфейсная ссылка, то это что-то и есть интерфейсная ссылка
:)
← →
ага0 (2008-05-26 12:16) [19]
> Если в конструктор передан нил то возвращается чисто интерфейсная
> ссылка а не объектная
:-)))) Че тут тока не узнаешь
Там написано что ежель без овнера, то подсчет ссылок работает, а ежель с овнером то отключен.
> Если что-то ведет себя как интерфейсная ссылка, лает как
> интерфейсная ссылка и пахнет как интерфейсная ссылка, то
> это что-то и есть интерфейсная ссылка
Да нифига она себя не ведет как интерфейс, как была объектом так им и осталась. А неявное преобразование оно преобразование и есть
← →
ЮЮ © (2008-05-26 12:18) [20]> Если что-то ведет себя как интерфейсная ссылка
в [17] же не ведет.
← →
Reindeer Moss Eater © (2008-05-26 12:23) [21]Но при выходе из области видимости она же освобождается.
← →
Reindeer Moss Eater © (2008-05-26 12:34) [22]Да нифига она себя не ведет как интерфейс
я и не говорил, что это интерфйес
← →
ага0 (2008-05-26 12:41) [23]
> Но при выходе из области видимости она же освобождается.
Кто? Вот это?
> XMLDoc : TXMLDocument;
> begin
> try
> XMLDoc := TXMLDocument.Create(nil);
С каких пирогов?
← →
jack128_ (2008-05-26 12:46) [24]
> Но при выходе из области видимости она же освобождается.
я же в 17 привел пример - не освобождается. Так как конструктор вернет объект, а не интерфейс..
К интерфейсу мы должны явно его кастить.
← →
ага0 (2008-05-26 12:54) [25]
> К интерфейсу мы должны явно его кастить.
Явно кастить не обязательно. Ежель в вопросе заменить
> XMLDoc : TXMLDocument;
на
> XMLDoc : IXMLDocument;
то будет автоматный релиз, компилер кастанет
← →
jack128_ (2008-05-26 12:58) [26]
> то будет автоматный релиз, компилер кастанет
оператор присваивания - мы всё равно сами должны будем - явно написать :-) Хотя формально это и подпадает под опредление явного каста, согласен. Но вобщем то неважно...
← →
Reindeer Moss Eater © (2008-05-26 13:54) [27]я же в 17 привел пример - не освобождается. Так как конструктор вернет объект, а не интерфейс..
1. Я не говорил, что конструктор вернет интерфейс.
2. В реальном случае (не с искуссвенным примером где используется наследник) объект будет освобожден как только выйдет из области видимости.
это я и называю интефейсной ссылкой.
← →
Reindeer Moss Eater © (2008-05-26 13:58) [28]С каких пирогов?
что, снова цитировать здесь description из хелпа?
← →
jack128_ (2008-05-26 14:23) [29]
> . Я не говорил, что конструктор вернет интерфейс.
Ты это говорил:
> Если в конструктор передан нил то возвращается чисто интерфейсная
> ссылка а не объектная
?
> В реальном случае (не с искуссвенным примером где используется
> наследник) объект будет освобожден как только выйдет из
> области видимости.
Твой пример из [10] я так понимаю тоже искуственный? в нем ведь тоже объект не уничтожается.
Тогда можно чёткий критерий, по которому мона отличить искуственный пример от неискуственного ??
← →
Reindeer Moss Eater © (2008-05-26 14:37) [30]в примере из [10] объект будет освобожден механизмом подсчета ссылок после выхода из локальной процедуры.
← →
Reindeer Moss Eater © (2008-05-26 14:51) [31]procedure TForm1.Button1Click(Sender: TObject);
var x : TXMLDocument;
begin
x := TXMLDocument.Create(nil);
x.Active := True;
x.Encoding := "windows-1251";
x.AddChild("root");
PostMessage(Handle,WM_USER,1000,LParam(x));
end;
procedure TForm1.OnMyMessage(var Msg: TMessage);
begin
if Msg.WParam = 1000 then ShowMessage(TXMLDocument(Msg.LParam).XML.Text);
end;
← →
Reindeer Moss Eater © (2008-05-26 14:57) [32]Точнее так:
:)
procedure TForm1.OnMyMessage(var Msg: TMessage);
begin
if Msg.WParam = 1000 then
try
ShowMessage(TXMLDocument(Msg.LParam).XML.Text);
except
on E: Exception do
ShowMessage("Ой! а где же наш самый обыкновенный неинтерфейсный объект?!"#13#10 + E.Message);
end;
end;
← →
ага0 (2008-05-26 15:26) [33]2 Reindeer Moss Eater
Ты че, прикалываешься?
procedure TForm1.Button1Click(Sender: TObject);
var x : TXMLDocument;
begin
x := TXMLDocument.Create(nil);
x.Active := True;
x.Encoding := "windows-1251";
//x.AddChild("root");
PostMessage(Handle,WM_USER,1000,LParam(x));
end;
Разницу сам вкуришь аль разъяснить?
← →
Reindeer Moss Eater © (2008-05-26 15:32) [34]Ну давай, разъясняй, дядька.
← →
Reindeer Moss Eater © (2008-05-26 15:50) [35]ау!
куда делся объект, если никто явно не вызывал free и если он якобы не освобождается при выходе из области видимости?
← →
ага0 (2008-05-26 16:37) [36]Ну ты даешь:)
Ты ж вызвал x.AddChild. А вона че возвращает? правильно - интерфейс. А че делает компилятор, получив интерфейсную сцылку? Правильно - вызывает для нее addRef. А где он ее хранит? Опять правильно - в неявно созданной локальной переменной. А че деет компилер, когда интерфейсная ссылка выходит из области видимости? Ну эт и ежу известно - вызывает для нее release. А что делает реализация TXMLNode._release? А она у своей ссылки на объект FDocument: TXMLDocument вызывает релиз! Вот ведь падла, а? Ну дальше понятно, ага?
Теперь вертаемся взад.
> Reindeer Moss Eater © (26.05.08 14:37) [30]
> в примере из [10] объект будет освобожден механизмом подсчета
> ссылок после выхода из локальной процедуры.
> Reindeer Moss Eater © (24.05.08 14:48) [10]
> with TXMLDocument.Create(nil) do
> begin
> LoadFromFile("Дурилка ты картонная.xml");
> ShowMessage(xml.Text);
> end;
Меняем этим кодом код из
> Reindeer Moss Eater © (26.05.08 14:51) [31]
и...где исключение? Исключение-то где?
← →
Reindeer Moss Eater © (2008-05-26 16:53) [37]Ты ж вызвал x.AddChild. А вона че возвращает? правильно - интерфейс.
И чо?
в x-то осталась ссылка на результаты конструктора, а не addchild.
Меняем этим кодом код из
А вот не надо ничего менять.
Надо сказать откуда в моем примере AV.
← →
ага0 (2008-05-26 17:05) [38]дык я ж сказал:( Неявная переменная для результа AddChild освобождается. компилер вызывает для нее release, у нутрях TXMLNode._release вызывается TXMLDocument._release, там счетчик ссылок обнуляитси и вызывается деструктор - че не понятно-то? Гримассы автоматизации работы с интерфейсами в дельфях.
> А вот не надо ничего менять.
А че ит не надо-то, когда с такого весь базар зачался?
← →
jack128_ (2008-05-26 17:06) [39]
> в x-то осталась ссылка на результаты конструктора, а не
> addchild.
в x - у тя ссылка на объект.
Главное, что ты вызвал метод, который вернул интерфейс(IXMLNode), в Release этого интефейса и будет уничтожен документ.
Вообще - странный ты человек.. [31] - ты хошь обсуждать, так как он вроде как вписывается в твою теорию, а вот [10] - намеренно игнорируешь...
← →
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.64 MB
Время: 0.042 c