Главная страница
    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.076 c
2-1201001386
~F@ntom~
2008-01-22 14:29
2008.02.17
Вставка ассемблеровского кода


2-1201100484
Тоник
2008-01-23 18:01
2008.02.17
stringtowidechar


2-1200997439
Gusev
2008-01-22 13:23
2008.02.17
Как реализовать "права пользователя" в своей программе? (БД)


2-1201188209
Тоник
2008-01-24 18:23
2008.02.17
обработчики на динамически загружаемые image ы


15-1200041562
ZoldBerger
2008-01-11 11:52
2008.02.17
Написал программу DelphiDecompiler





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