Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поддерживает ли об'ект интерфейс ? [D7, WinXP]


Страницы:   1 2

val_5 ©   (2005-03-11 04:53:00) 

Как определить поддерживает ли форма заданный интерфейс ?
Например :                                            

type
 IFormDB = interface
   ['{31E10702-B99C-42B9-BD95-3DE0EB1E27B2}']
   function DataSource: TDataSource;
   ...
 end;

 TFormDB = class(TForm, IFormDB)
   function DataSource: TDataSource;
   ...
 end;

...

if < Screen.Forms[I] поддерживает IFormDB > then
 ShowMessage( (Screen.Forms[I] as IFormDB).DataSource.DataSet.Name );


Что написать вместо "< Screen.Forms[I] поддерживает IFormDB >" ?


Poirot   (2005-03-11 13:41:00) [1]

кроме гы-гы я от вас ничег и не слышал:) хыы... поддакивать все умеют:)


WondeRu   (2005-03-11 13:39:00) [2]

WondeRu ©   (11.03.05 9:48) [4]
согласен, чушь накатал и повел за собой других :)


Набережных С.   (2005-03-11 13:35:00) [3]


> Poirot ©   (11.03.05 13:24) [22]

Ошибаетесь. В [10] был не наезд, а провокация. С целью заставить начать думать или хотя бы воспользоваться хелпом.

> И всё что вы сказали сейчас можно было сказать и заранее

Конечно мог бы. Но мне трудно представить, что человек, рассуждающий об интерфейсах, да еще отсылающий к F1, не знает подобных вещей. Мне казалось, что это всем известно. А в [6] - просто оговорка, мелкая ошибка, вызванная обычной торопливостью. Такое со многими бывает, и со мной тоже. И потому ни в [8] , ни в [10] я ничего не сказал, давая Вам возможность поправиться самому, хотя бы с помощью хелпа. То, что Вы предпочли поступить иначе - Ваш личный выбор, винить в нем некого.


DiamondShark   (2005-03-11 13:33:00) [4]


> при том. что в принципе всё к нему и сводится и GUID и само
> понятие интерфейса...

Гы-ыы ;)))


Poirot   (2005-03-11 13:24:00) [5]

Зы хотелось получить вразумительное объяснение - а не наезд - в [10] я вижу наезд - тон соответствующий.
Зызы: С интерфейсами хоть раз - работал, но вилдимо не с теми:)
зы-зы-зы:И всё что вы сказали сейчас можно было сказать и заранее. Справку читал и не раз. COM при том. что в принципе всё к нему и сводится и GUID и само понятие интерфейса...


Набережных С.   (2005-03-11 13:12:00) [6]


> Poirot ©   (11.03.05 11:33) [13]
> Во-первых, мене это не нать.

Дак какого ... тогда лезть в ветку?! Недаржание слов? Промолчать не в силах? На кой ляд бред нести, коли не смыслите в этом нихрена?

> Но если сделать по "учебнику" QueryInterface То всё работает
> и от Object as IsomeInterface <> nil я думаю вы не буите
> спорить, что в данном случае вызовится IUnknown.QueryInterface!
> или буите?!

Нет, спорить я не буду. Особенно, с учетом совсем недавней ветки по этому поводу. А еще потому, что эта конструкция -  просто бред сивокобыльный. И это отлично известно каждому, кто хотя бы однажды, хоть немного работал с интерфейсами. И тот факт, что здесь действительно вызывается IUnknown.QueryInterface, абсолютно ничего не меняет, ибо проверка на nil здесь лишена даже намеков на смысл.

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

Из всех предложенных вариантов правильно, в соответствии с вопросом, сработают только 2, данные в [1] и [2]. Из них второй совсем в точку, а первый хотя бы работать будет. Все, что после этого - чистая, незамутненная знаниями фантизия, с действительностью ничего общего не имеющая:(

Нет, ошибиться может каждый, это понятно. Непонятно, зачем любой ценой упорствовать в собственных ошибках, приплетая сюда вещи, к данной теме вообще отношения не имеющие, вроде COM? Почему просто не почитать справку, как было уже дважды предложено??


Poirot   (2005-03-11 12:33:00) [7]

>>Поддержка интерфейсов -- внутренняя фича языка дельфи.

А вот то что вы хотели для примера
TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)
IInterface в Делфи тоже самое что и IUnknown. так что тут всё причём.
Это таки как раз и есть COM "полюбому":)


DiamondShark   (2005-03-11 12:20:00) [8]

А при чём тут классика, ком и ц?
Поддержка интерфейсов -- внутренняя фича языка дельфи.

Кстати, я тоже хорош: as тут вообще не подходит.


Poirot   (2005-03-11 11:58:00) [9]

>>DiamondShark ©   (11.03.05 11:47) [15]
Опятьже "книжная" реализация COM :)  ане чепуха:) Так сказать классика на добром C++.
про as чепуха:)Это интересно:)

>>А IUnknown откуда возмётся?
Ну тогда вот вам и ответ - он возмётся от туда, что он есть базовый класс любого интерфейчас:) COM Догма:)
С as погорячился :)


DiamondShark   (2005-03-11 11:52:00) [10]

По сабжу:
Либо GetInterface с проверкой возврата,
либо as с отловом исключения.


DiamondShark   (2005-03-11 11:50:00) [11]


> То всё работает и от Object as IsomeInterface <> nil

А нафига <> nil?
as возвращает либо ссылку на интерфейс, либо исключение, если интерфейс не реализован.


> что в данном случае вызовится IUnknown.QueryInterface

А IUnknown откуда возмётся?


DiamondShark   (2005-03-11 11:47:00) [12]


> Poirot ©   (11.03.05 11:33) [13]

Какая чепуха.


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

Всё с точностью до наоборот: GetInterface и GetInterfaceEntry служат для реализации QueryInterface.


Poirot   (2005-03-11 11:41:00) [13]

Ok, QueryInterface лучший вариант:))
Гы:)


Poirot   (2005-03-11 11:33:00) [14]

Во-первых, мене это не нать.
Варианты предложили - в разных случаях каждый работает.... при условии, что QueryInterface реализован нормально...
Можно TObject.GetInterface
можно TObject.GetInterfaceEntry
Но если сделать по "учебнику" QueryInterface То всё работает и от Object as IsomeInterface <> nil я думаю вы не буите спорить, что в данном случае вызовится IUnknown.QueryInterface! или буите?! тогда хотелосьбы доква - у мена дебагер под руками!


Набережных С.   (2005-03-11 11:26:00) [15]


> Poirot ©   (11.03.05 11:18) [11]

И что это меняет? Может, все-таки почитаешь справку, а?


Poirot   (2005-03-11 11:18:00) [16]

зы... маленькое дополнение - я имел ввиду QueryInterface интерфейса IUnknown.


Набережных С.   (2005-03-11 11:18:00) [17]


> Poirot ©   (11.03.05 11:06) [9]
> Многое - гы:) В данном контексте подробнее не надо говорить
> об этом по моему:)

Да ну? А что, например? И почему не надо? Имхо, чего точно не надо делать, так это глупостей говорить. А надо, как ты и советовал, но сам почему-то не сделал, посмотреть справку. А в [4], как и в [3], полная ерунда написана, в обоих вариантах, от начала и до конца.


Poirot   (2005-03-11 11:06:00) [18]

[8]
Ас?:)_) Многое - гы:) В данном контексте подробнее не надо говорить об этом по моему:)


Набережных С.   (2005-03-11 11:02:00) [19]


> Virgo_Style ©   (11.03.05 10:02) [5]
>
> > if (Screen.Forms[I] as IFormDB) <> nil then ...
>
> А почему не .. IS .. ?

А что, IS уже можно применять к интерфейсам? Новая новость:))
Но еще интереснее, почему IFи <>nil:))

> Poirot ©   (11.03.05 10:06) [6]

А больше AS ничего не делает?


Virgo_Style   (2005-03-11 10:34:00) [20]

Логично :-)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо