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

Вниз

Вопрос про 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.042 c
2-1200924371
zeroed
2008-01-21 17:06
2008.02.17
Коллекции объектов моего класса


2-1201204518
SveTT
2008-01-24 22:55
2008.02.17
Ругается на целое число


15-1200425147
Kolan
2008-01-15 22:25
2008.02.17
Решил сделать доклад для руководства :) послали&#133


15-1200483212
GlFox
2008-01-16 14:33
2008.02.17
Windows XP over FreeDOS


2-1201181350
IC+
2008-01-24 16:29
2008.02.17
Получить путь к объекту из ярлыка (lnk)





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