Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2015, 14:31   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Прочитать библиотеку типов из СОМ сервера

Доброго всем.

Вроде не писал тут подобный вопрос, но задаюсь им довольно давно.
Как ЯВУ (а точнее компиляторы) понимают какой метод вызвать (или как и к какому свойству обратиться) в СОМ сервере по пути к свойству.
Я ведь правильно понимаю - обращение к свойству или методу интерфейса состоит к обращению к некой таблице свойств по номеру этого свойства в интерфейсе? Но программист не пишет номер. программист пишет "словами" типа
Код:
ComDialog.Execute(Param1,Param2)
И если ComDialog это некий обьект, созданный с помошью CreateOleObject() то как компиль тогда находит какую ветку интерфейса вызывать и передавать ей параметры? Есть ли функции WinAPI, способные показать хотя бы список свойств некоего интерфейса?

Как вообще на уровне скажем Ассемблера работают с интерфейсами?
ссылки ессно приветствуются.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2015, 15:12   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

На Delphi Kingdom была статейка с разбором того, что такое интерфейс, как это работает. Найти не получается

По сути интерфейсы это очень продвинутая секция экспорта функций, т.е. Вы экспортируете сразу класс.

Цитата:
Как ЯВУ (а точнее компиляторы) понимают какой метод вызвать (или как и к какому свойству обратиться)
Макро-разметка IDL. В ресурсах OCX лежит файл IDL, и которого импортеры генерят сорцы под свои IDE. По сути у OCX есть свой GUID которым обозначена DLL, к этому GUID цепляются GUID'ы реализованных библиотекой интерфейсов. Посмотрите исходники сервера регистрации COM объектов, среди демок в составе delphi.

Получается, что есть фабрика OCX и GUID который ищет ваш компилятор в реестре, далее по GUID интерфейса чей метод вызван, от фабрики OCX ищется.. понятия не имею что, и далее вызывается.

Хорошо будет, если изучите процесс регистрации таких библиотек.

Вот нашел: http://www.delphikingdom.ru/asp/view...catalogid=1202
см. представление интерфейса в памяти.

P.S. Не путайте COM и OLE это 2 разные технологии.
OLE можно передать что хочешь, тебе просто вернет ошибку система, что у объекта нет этого метода.
С интерфейсом так не прокатит, скомпилировать даже не даст.

Последний раз редактировалось Человек_Борща; 07.04.2015 в 15:24.
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2015, 15:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Клас! Тоесть это, я правильно понял, тупо текст, который нужно синтаксическим анализатором обработать?
Ща надо будет почитать про MIDL.

Может в WinAPI есть функции, которыми этот ресурс можно будет вычитать так, чтоб получить уже готовую таблицу методов интерфейсом с их параметрами?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2015, 15:34   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Клас! Тоесть это, я правильно понял, тупо текст, который нужно синтаксическим анализатором обработать?
Да, вам нужно сгенерировать код поддерживаемый вашим компилятором. Эдакий класс без реализации, виртуальный.

Цитата:
Может в WinAPI есть функции, которыми этот ресурс можно будет вычитать так, чтоб получить уже готовую таблицу методов интерфейсом с их параметрами?
Нет нету, хотя могу и ошибаться.... может где-то описано что из себя представляет интерфейс и как го дергать, с точки зрения поддержки этих технологий. Может в SDK копнете?
Изучите, как регистрируется ActiveX-библиотека в реестре, что туда записывается.
Напишите свой OCX и EXE использующий его, посмотрите что куда стучится...
Опытный путь всегда интересный....

Последний раз редактировалось Человек_Борща; 07.04.2015 в 15:44.
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2015, 15:46   #5
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

что сом что оле по сути одно и тоже

см DispId, диспетчерезация, IDispatch, позднее и раннее связывание etc
lomastr_ вне форума Ответить с цитированием
Старый 07.04.2015, 15:47   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
что сом что оле по сути одно и тоже
мм да? В какой версии OLE начинает требовать описание методов используемого класса, для сборки библиотеки/проекта?
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2015, 15:49   #7
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

читайте выше
lomastr_ вне форума Ответить с цитированием
Старый 07.04.2015, 16:07   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
читайте выше
В общем да, походу это 2 дополняющих себя механизма.

Последний раз редактировалось Человек_Борща; 07.04.2015 в 16:10.
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2015, 16:33   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Да, вам нужно сгенерировать код поддерживаемый вашим компилятором.
Ага. Попробую тогда упор на изучение MIDL дать.
Цитата:
Может в SDK копнете?
MSDN копаю. Пока не нашел.
Цитата:
Изучите, как регистрируется ActiveX-библиотека в реестре, что туда записывается.
Насколько (пока что) понял в реестр заносятся идентификаторы класса, а вот IID не регистрируется.
Цитата:
Напишите свой OCX и EXE использующий его, посмотрите что куда стучится...
Только в CLASSES_ROOT.
Ладно уж хотя бы понятно с чего начинать копать. Про IDL я и не слышал вообще, потому и плюсанул
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2015, 16:51   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Про IDL я и не слышал вообще
Предок MIDL. Есть в старых delphi. У Delphi с XE версий вообще свой макро-язык RIDL.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов интерфейса из СОМ сервера. Stilet Win Api 9 23.12.2016 03:51
создание простого объекта СОМ в составе внутреннего сервера Delphi carrie bradshaw Помощь студентам 0 30.03.2015 21:58
настройка СОМ-сервера mureno Компоненты Delphi 0 12.12.2010 15:35
Система СОМ на базе сервера МТS s2dentishe Общие вопросы Delphi 4 17.09.2010 10:10