Nach Hause
Top.Mail.Ru Yandeks.Metrika
Forum: "Haupt";
Aktuelles Archiv: 2003.07.24;
Herunterladen: [xml.tar.bz2];

Nach unten

Schnittstellen Finden Sie ähnliche Zweige


Alex134   (2003-07-13 18:49) [0]

Объясните пожалуйста зачем они нужны, можно на примере. Читаю две книжки и не могу понять самой сути, там только и написано как их объявлять, про три основных метода, короче фигня всякая.



Ihor Osov'yak   (2003-07-13 21:30) [1]

COM без них невозможен. Но их можно использовать не только в контексте COM.

Зы - позволю себе ниже фрагмент одной статьи - может чего и прояснит:

COM - это есть во первых, некий набор не нарушаемых ни при каких условиях правил, согласно которым одни программные объекты могут воспользоваться ресурсами других программных обьектов, а также средства операционной системы, которые обеспечивают это взаимодействие. Причем те объекты, которые используют ресурсы (далее клиенты), никогда не получают полного контроля над объектами, которые эти ресурсы отдают (далее - компоненты, или объекты COM)... Мало того, клиенту даже не обязательно иметь представление об общем устройстве объекта COM. Для их взаимодействия важно наличие оговоренного интерфейса взаимодействия и гарантии того, что этот интерфейс никогда не будет изменен.
Здесь под интерфейсом понимается набор определенных методов, которые должны быть реализованы объектом COM, и которые "предоставляются" клиенту. На уровне бинарного кода за интерфейсом стоит некая структура в памяти, которую реализует объект COM и которая предоставляет собой некую таблицу адресов методов обьекта COM. Когда говорят, что клиент получил интерфейс, то понимают, что ему стал известен адрес той структуры. Кроме того, клиент "знает", в каком порядке идут точки вхождения в этой таблице для соответствующих методов, так как клиент знаком с соответствующей спецификацией.
...
Подытоживая, можно сказать,что интерфейс есть спецификация, которая на на уровне бинарного кода "отражается" в таблицу вызовов в памяти.
..
В СОМ интерфейсы - это все. Для клиента сервер представляет собой набор интерфейсов. Клиент с сервером может взаимодействовать только посредством интерфейсов. Мало того, клиент даже может не знать о всех интерфейсах, поддерживаемых сервером.
Все интерфейсы наследуются от базового интерфейса IUnnknown . Причем, если говорят о наследовании интерфейсов, то понимают не наследование реализации (с ней мы имеем дело, когда работаем в пределах объектной модели хотя бы того же Delphi), а наследование деклараций. Под наследованием деклараций понимается то, что если некий интерфейс IB наследуется от интерфейса IA, то в соответствующей таблице вызовов для интерфейса IB сначала будут идти адреса методов, которые декларируются в IA, а затем адреса методов от IB. Причем списки формальных параметров наследуемых методов не должны быть изменены. Если вспомнить, что интерфейсы есть спецификации, то становится понятным, почему по отношению к ним может идти речь только о наследовании деклараций. Конечно, при реализации конкретного COM-обьекта можно использовать технологию наследования реализации, но это будет внутреннее дело объекта, которое никак не затрагивает клиента.

В завершение разговора об COM, я хотел бы упомянуть о некоторых методах базового интерфейса IUnnknown, так как во первых, эти методы присутствуют в любом интерфейсе (вспомним о наследовании деклараций и о том, что любой интерфейс наследуется от IUnnknown) и во вторых, на использовании этих методов строится вся идеология работы с COM.

Итак, разрешите представить - QueryInterface. С помощью этого интерфейса клиент может определить, поддерживает ли COM-обьектом какой либо другой интерфейс, который известен клиенту, и получить указатель на тот интерфейс, если он поддерживается объектом. При работе с СOM, это пожалуй самый популярный вызов. В Dеlphi он иногда вызывается явно, иногда неявно. Неявный вызов происходит при применении оператора as для интерфейсных ссылок.
Интерфейс IUnnknown также декларирует два метода интерфейса AddRef и Release, которые ответственны за подсчет использования COM-обьекта (одно из требований к COM-обьектам - они должны уметь сами себя уничтожить, если в их услугах более никто не нуждается). Вам вряд ли придется вызывать эти методы напрямую, так как Delphi генерирует их вызовы автоматически.




Ihor Osov'yak   (2003-07-13 23:25) [2]



То есть, работа с COM-обьектами идет только через интерфейсы. На эту тему есть куча литературы.

Есть еще менее очевидный момент. Использование интерфейсов помимо COM. Можно привести несколько примеров. Например, реализация обьектов с самоуничтожением. То есть, создаем обьект и работаем с ним исключительно по интерфейсной ссылке. Когда этот обьект становится ненужным, ссылка обнуляется, и как следствие, счетчик использований обьекта уменшается на единицу.. Если обьект больше нигде не используется, счетчик сбрасывается в 0 и обьект уничтожается.. Красиво, и главное - поддержка на уровне синтаксиса языка..
Второй пример. Есть много разнотипных обьектов. Все они имеют несколько одинаковых методов, и мы вынуждены работать с этими методами, независимо от типа обьекта.. Например, множество диалоговых оком, методы - putData, getData, Execute.. Предположим, их в принцыпе проблематично свести к одному предку, или нецелесообразно.. Не будем здесь рассуждать об изьяне в проектировании - возможно пример неудачный, но идею он иллюстрирует..
Так вот, мы можем продекларировать некий интерфейс, содержащий этих три метода, и научить эти диалоговые окна реализировать этот интерфейс.. И потом работать через этот интерфейс, не особо вникая, какой диалог мы дергаем за этот интерфейс..




Alex134   (2003-07-14 01:13) [3]

Теперь все стало ясно, большое спаибо !



Крот   (2003-07-14 08:11) [4]

http://www.clubpro.spb.ru/cominside/

Здесь очень хорошая рассылка по COM-технологиям, лучше всяких книжек, есть примеры на Delphi, очень рекомендую заглянуть.



Seiten: 1 ganze Branche

Forum: "Haupt";
Aktuelles Archiv: 2003.07.24;
Herunterladen: [xml.tar.bz2];

nach oben









Speicher: 0.58 MB
Zeit: 0.037 c
14-78044
Andryk
2003-07-09 15:24
2003.07.24
Was ist mit dem Senden von Nachrichten?


3-77777
VSS
2003-06-27 01:37
2003.07.24
Clipper Ovsky-Basen, Apollo, Novell-Client, Basen lassen sich nicht öffnen


1-77867
Sauer
2003-07-10 10:44
2003.07.24
So arbeiten Sie direkt mit der Registrierung, ohne TRegistry zu verwenden


14-78084
Anthony
2003-07-08 00:13
2003.07.24
Wo finden Sie die Komponente: http://www.litvinov-soft.narod.ru/svodka.jpg


14-78063
Dmitry K.K.
2003-07-07 06:13
2003.07.24
Geburtstag 7 Juli





Afrikanisch Albanien Arabisch Armenisch Aserbaidschanisch Baskisch Weißrusse Bulgarian katalanisch Chinesisch (vereinfacht) Chinesische Tradition) kroatisch Tschechisch Dänisch Dutch Englisch estnisch Philippinisch Finnish Französisch
Galicisch Georgisch Deutsch Griechisch haitian Creole Hebräisch Hindi ungarisch isländisch Indonesian irisch Italian Japanisch Koreanisch lettisch litauisch Makedonisch Malay Maltesisch Norwegian
persisch Polnisch Portugiesisch Rumänisch Russisch serbisch Slovakisch Slowenisch Spanisch Suaheli Swedish Thai Türkisch Ukrainisch Urdu Vietnamesisch Walisisch Jiddisch Bengalisch bosnisch
cebuano Esperanto Gujarati Hausa Hmong igbo Javanisch kannada khmer Laotisch Lateinisch Maorisch Marathi Mongolisch nepali Pandschabi Somalisch Tamilisch Telugu Yoruba
Zulu
Английский Französisch Deutsch Italienisch Португальский Russisch Spanisch