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

Вниз

Поддерживает ли об ект интерфейс ?   Найти похожие ветки 

 
val_5 ©   (2005-03-11 04:53) [0]

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

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 >" ?


 
Defunct ©   (2005-03-11 05:41) [1]

а нельзя ли зарезервировать сообщение, ответив на которое форма уведомит о поддержке интерфейса?

if SendMessage( Screen.Forms[i].Handle, WM_INTERFACEQUERY, 0, 0) = <Ваш, заранее определенный ответ > then
  ShowMessage( (Screen.Forms[I] as IFormDB).DataSource.DataSet.Name );


 
Fay ©   (2005-03-11 05:52) [2]

if Supports(Screen.Forms[I], IFormDB) then


 
WondeRu ©   (2005-03-11 09:46) [3]

if QueryInterface(StringToGUID("31E10702-B99C-42B9-BD95-3DE0EB1E27B2"), obj) = E_NoInterface then
ShowMessage( (Screen.Forms[I] as IFormDB).DataSource.DataSet.Name );


 
WondeRu ©   (2005-03-11 09:48) [4]

WondeRu ©   (11.03.05 9:46) [3]
пропустил чуть-чуть

if Screen.Forms[I].QueryInterface(StringToGUID("31E10702-B99C-42B9-BD95-3DE0EB1E27B2"), obj) = E_NoInterface then
ShowMessage( (obj as IFormDB).DataSource.DataSet.Name );


еще можно проще сделать проверку
if (Screen.Forms[I] as IFormDB) <> nil then ...


 
Virgo_Style ©   (2005-03-11 10:02) [5]


> if (Screen.Forms[I] as IFormDB) <> nil then ...

А почему не .. IS .. ?


 
Poirot ©   (2005-03-11 10:06) [6]

to [5]потомучто F1!!!
Смысл другой - в данном случае "as" вызывает QueryInterface
т.е [4] оба варианта впринципе одинаковы!


 
Virgo_Style ©   (2005-03-11 10:34) [7]

Логично :-)


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


> 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 ничего не делает?


 
Poirot ©   (2005-03-11 11:06) [9]

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


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


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

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


 
Poirot ©   (2005-03-11 11:18) [11]

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


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


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

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


 
Poirot ©   (2005-03-11 11:33) [13]

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


 
Poirot ©   (2005-03-11 11:41) [14]

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


 
DiamondShark ©   (2005-03-11 11:47) [15]


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

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


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

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


 
DiamondShark ©   (2005-03-11 11:50) [16]


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

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


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

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


 
DiamondShark ©   (2005-03-11 11:52) [17]

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


 
Poirot ©   (2005-03-11 11:58) [18]

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

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


 
DiamondShark ©   (2005-03-11 12:20) [19]

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

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


 
Poirot ©   (2005-03-11 12:33) [20]

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

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


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


> 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 13:24) [22]

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


 
DiamondShark ©   (2005-03-11 13:33) [23]


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

Гы-ыы ;)))


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


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

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

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

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


 
WondeRu ©   (2005-03-11 13:39) [25]

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


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

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



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

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

Наверх





Память: 0.51 MB
Время: 0.015 c
1-1133307886
GuAV
2005-11-30 02:44
2005.12.25
SaveDialog - в каком формате сохранять ?


14-1133434178
Alkid
2005-12-01 13:49
2005.12.25
NamedPipe и отжор памяти


2-1133983045
De1uxe
2005-12-07 22:17
2005.12.25
Что делаю не так?


4-1130276882
ВАсилий
2005-10-26 01:48
2005.12.25
Form Hide


14-1133276305
Nic
2005-11-29 17:58
2005.12.25
Нахождение в академии - хорошо или нет?





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