Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

Вопрос про COM   Найти похожие ветки 

 
IvanZ   (2008-01-15 00:32) [0]

Бывают COM "библиотеки" полностью открытыми, ну т.е. в них даже в ресурсах есть TLB файл, который можно использовать как файл с указаниями интерфейсов.

А бывают закрытые, т.е. нет никаких TLB, все предельно не ясно, а приложение и COM взаимодействуют, при этом ни в приложении (уже скомпилированномм), ни в библиотке - любые имена интерфесов отстуствуют.

Как называется второй "режим" работы? Точно знаю что читал об этом, но совсем забыл.

Спасибо.


 
Черный Шаман   (2008-01-15 04:03) [1]


> IvanZ   (15.01.08 00:32)


Может я ошибаюсь, но разве в COM-технологии интерфейс может быть закрытым?


 
ketmar ©   (2008-01-15 06:14) [2]

>[1] Черный Шаман (15.01.08 04:03)
>Может я ошибаюсь, но разве в COM-технологии интерфейс может быть
>закрытым?

для работы с COM tlb не нужны. можно общаться и без них, если известны CLSID и сигнатуры методов.


 
isasa ©   (2008-01-15 08:53) [3]

Раннее и позднее связывание, не?


 
isasa ©   (2008-01-15 08:58) [4]

ketmar ©   (15.01.08 06:14) [2]

:)
Использование *.TLB это дельфийские штучки,не?
Крутые перцы используют IDL ...


 
ketmar ©   (2008-01-15 09:05) [5]

>[4] isasa ©(15.01.08 08:58)
>Использование *.TLB это дельфийские штучки,не?
>Крутые перцы используют IDL ...

это девелоперы. а энд-юзеры и tlb обходятся.

а впрочем, я вообще со всей этой ерундой работать не умею. %-)


 
DiamondShark ©   (2008-01-15 09:08) [6]


> Использование *.TLB это дельфийские штучки,не?

Не. TLB -- это описания интерфейсов, а использовать его может кто угодно. VC и VB тоже используют TLB, кроме того, TLB может использовать системный маршалер.


> Крутые перцы используют IDL ...

Ага, если он есть, во-первых.
Во-вторых, эта фраза примерно эквивалентна: "EXE -- это хххисйские штучки, крутые перцы используют PAS."


 
ketmar ©   (2008-01-15 09:16) [7]

>[3] isasa ©(15.01.08 08:53)
>Раннее и позднее связывание, не?

кстати, какое, нафиг, раннее связывание в COM? O_o


 
DiamondShark ©   (2008-01-15 09:19) [8]


> какое, нафиг, раннее связывание в COM?

А, я извиняюсь, раннее связывание бывает где?


 
Черный Шаман   (2008-01-15 18:35) [9]


> ketmar ©   (15.01.08 06:14) [2]
>
> >[1] Черный Шаман (15.01.08 04:03)
> >Может я ошибаюсь, но разве в COM-технологии интерфейс может
> быть
> >закрытым?
> для работы с COM tlb не нужны. можно общаться и без них,
>  если известны CLSID и сигнатуры методов.


Да, но импорт классов,методов и параметров закрыть нельзя.


 
DiamondShark ©   (2008-01-15 19:01) [10]


> Да, но импорт классов,методов и параметров закрыть нельзя.

Можно. Если CLSID и сигнатуры методов дать, например, написаными на бумажке.


 
ketmar ©   (2008-01-15 19:04) [11]

>[8] DiamondShark ©(15.01.08 09:19)
>>какое, нафиг, раннее связывание в COM?
>А, я извиняюсь, раннее связывание бывает где?

насколько я помню сей термин, «ранее связывание» — это когда компилятор присобачивает заместо вызова метода по VMT прямой адрес в коде, куда скакать надо, потому что видит, что VMT здесь не нужно. что в COM принципиально нереализуемо.


 
ketmar ©   (2008-01-15 19:06) [12]

>[11] ketmar ©(15.01.08 19:04)
или не компилятор, а загрузчик сразу сам адреса прописывает — по собственной инициативе или по наводе. в данном случае не важно, потому что этого всё равно нет.


 
DiamondShark ©   (2008-01-15 19:21) [13]


> ketmar ©   (15.01.08 19:04) [11]

А-аа... Не, это не то. Тут, видимо, имелось "ранее связывание" (использование DISPID из библиотеки типов, вместо IDispatch.GetIDsOfNames), как противоположность "позднему связыванию" (late binding).
Где-то в каких-то книжках по ВБасику и Automation такие термины и использовали: ранее, позднее и VTable связывание.


 
ketmar ©   (2008-01-15 20:04) [14]

>[13] DiamondShark ©(15.01.08 19:21)
тьфу. понапридумывали словей — так вот скажешь, и потом перед боярями не лепо. учту. я-таки, похоже, не то понял.


 
ага   (2008-01-16 05:26) [15]


>DiamondShark ©   (15.01.08 19:21) [13]


>Тут, видимо, имелось "ранее связывание" (использование DISPID из библиотеки типов, вместо IDispatch.GetIDsOfNames)

Использование DISPID  - это ID-связыване, ID-binding.
А раннее связывание - оно и есть на этапе компиляции. У компилятора есть описание интерфейса, и он строит вызов, вставляя вычесление адреса метода как смещение от начала таблицы методов, а адрес этой таблицы и есть, грубо говоря, интерфейс. А для ID-связывания компилятору нужно описание диспинтерфейса. Проще говоря, ID-связывание - это когда описания интерфейса нет, но есть ID методов и GetIDsOfNames вызывать не нужно, в отличии от позднего связывания.


>ранее, позднее и VTable связывание

Не-а. Раннее(VTable), ID-связывание и позднее.

Не знаю правда, есть ли это в нонешном MSDN, но раньше было.



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

Текущий архив: 2008.02.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
2-1201267734
abhtr
2008-01-25 16:28
2008.02.17
Как удалить файл "Только чтение"


2-1201186963
SveTT
2008-01-24 18:02
2008.02.17
Условие на MAX значение


10-1108818250
ilias1979
2005-02-19 16:04
2008.02.17
как показать полностью документ в olecontainer


2-1201267828
asdfa
2008-01-25 16:30
2008.02.17
Как пропустить выполнение цикла верхнего уровня?


15-1200477585
Washington
2008-01-16 12:59
2008.02.17
Компонент типа CheckListBox