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

Вниз

Интерфейсы без IID (GUID). Как работать в Delphi7?   Найти похожие ветки 

 
iZEN ©   (2006-04-20 10:29) [0]

Подскажите, что почитать на тему создания интерфейсов БЕЗ IID (GUID) в Delphi7.
Нужна подробная информация о внутренней механике работы объектов, реализующих такие интерфейсы (от порядка инстанцирования до взаимодействия).
(Это должно быть сильно отличается от реализации в Delphi3. Я правильно думаю?)


 
iZEN ©   (2006-04-20 10:32) [1]

Информация желательна в электронном виде.


 
vuk ©   (2006-04-20 11:36) [2]

Интерфейсы без IID делать можно. В реализации ничем не отличается от таких же интерфейсов, но с IID. Разница только в том, что их запрашивать нельзя. Получить же такой интерфейс можно только напрямую, приведением экземпляра класса через as.


 
Харько ©   (2006-04-20 11:39) [3]

А в чем радость интерфейса без IID? Suppoorts не используешь (что уже громадное неудобство)...


 
iZEN ©   (2006-04-20 12:27) [4]

vuk ©   (20.04.06 11:36) [2]
В Delphi 3 при приведении объектной ссылки к такому интерфейсу через оператор as вызывает ошибку, если я не ошибаюсь.
Ну и ещё общее свойство таких интерфейсов: их нельзя экспортировать во вне, но можно использовать только внутри приложения.

Соответственно, для классов, реализующих методы таких интерфейсов, можно не заботиться о "второй" линии жизни - линии на основе подсчёта ссылок, а полностью положиться на "ручное" управление временем жизни объекта (Free() вызывать, например, независимо от использования интерфейса).
Я прав?


 
iZEN ©   (2006-04-20 12:30) [5]

Может есть какие отличия и нюансы работы с такими интерфейсами Delphi7 от предыдущих версий (6.0 и 5.0, например)?


 
Гаврила ©   (2006-04-20 12:30) [6]


> Соответственно, для классов, реализующих методы таких
> интерфейсов, можно не заботиться о "второй" линии
> жизни - линии на основе подсчёта ссылок, а полностью
> положиться на "ручное" управление временем жизни
> объекта (Free() вызывать, например, независимо от
>использования интерфейса).
> Я прав?


Ничто не мешает организовать такое же поведение (ручное управление временем жизни) и для интерфейсов с IID.
Так что по прежнему не видно смысла.


 
Гаврила ©   (2006-04-20 12:32) [7]


> iZEN ©  


Или ты просто их (гуиды) экономишь, боишься что кому-то не хватит? )))


 
iZEN ©   (2006-04-20 12:34) [8]

Гаврила ©   (20.04.06 12:32) [7],
чтобы не экспортировать и чтобы их не было видно из вне.


 
iZEN ©   (2006-04-20 12:42) [9]

vuk ©   (20.04.06 11:36) [2],
>Разница только в том, что их запрашивать нельзя.
В теории при каждом запросе интерфейса с IID происходит увеличение счётчика ссылок на объект, реализующий этот интерфейс. Но что происходит при использовании интерфейса без IID, если его запрашивать нельзя?
Я думаю, что счётчик ссылок в этом случае не меняется (ни инкрементируется, ни декрементируется), так как же поступает в этом случае компилятор: вставляет ли он автоматически код или нет? Могу ли я в этом случае управлять временем жизни объекта так, как если бы он был обычным объектом без интерфейса (вызывать Free() как у обычного объекта)?


 
Гаврила ©   (2006-04-20 13:03) [10]


> iZEN ©


> и чтобы их не было видно из вне.


По умолчанию их извне и не видено. Чтобы их стало видно, надо предпринять определенные усилия.

> В теории при каждом запросе интерфейса с IID
> происходит увеличение счётчика ссылок на объект


Посмотри в модуле System, класс TinterfacedObject.
Посмотри как там реализованы методы _Addref и _Release.
Вот именно так, вручную, и реализовывается автоматическое управление временем жизни объекта.
И ничто не мешает тебе реализовать эти метды совершенно по другому, IID тут ни при чем.
Единственное, что будет обеспечено действительно автоматически, это вызовы _Addref и _Release.
ИХ вызывает компилятор ,а что при их вызове делать - считать ли ссылки, или не считать, решаешь уже ты



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

Форум: "Прочее";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
15-1145424688
Mozart
2006-04-19 09:31
2006.05.14
не могу установить Zyxel U1496E


2-1145971127
Виктор1985
2006-04-25 17:18
2006.05.14
как переменную типа double привести к integer?


2-1145637868
Uriy
2006-04-21 20:44
2006.05.14
Вопрос по VCL


15-1145545721
ArtemESC
2006-04-20 19:08
2006.05.14
ЖЗЛ Ленин...


15-1145468151
Geserx
2006-04-19 21:35
2006.05.14
QIP





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