На горизонте моячит новая работа связанная с DCOM(COM) технологиями.
В процессе ознакомления с ТЗ сформированным заказчиком, возникло несколько вопросов связанных с хотелками заказчика и возможностями технологии COM.
Если сейчас не вдаваться в тонкости всего ТЗ.
То на повестки дня стоит вопрос — можно ли из существующего сервера( сервер является DCOM сервером, в виде исполняемого файла) получить список компонентов поддерживаемый этим сервером, и получить список всех функций и список параметров функций?
P.S. Прошу прощение у народа за возможные не точности в постановке вопроса в части COM терминов. У меня другая специализация. А этим вопросом меня загрузили всего несколько часов назад. Так как я еще не шибко образован в данной области.
Здравствуйте, wbear, Вы писали:
W>На горизонте моячит новая работа связанная с DCOM(COM) технологиями.
Фига себе, это в 2021 году
W>То на повестки дня стоит вопрос — можно ли из существующего сервера(сервер является DCOM сервером, в виде исполняемого файла) получить список компонентов поддерживаемый этим сервером, и получить список всех функций и список параметров функций?
В общем случае нет, но как правило с EXE или DLL поставляется так называемая "библиотека типов" (может быть зашита прямо в DLL например).
Если такая библиотека имеется, то это возможно. Она имеется для большинства COM-серверов, потому как они для того и предназначены, чтобы предоставлять сервисы другим.
Однако бывают случаи когда разработчик сервиса не хочет показывать какие интерфейсы и параметры имеются, и может специально не включить библиотеку типов.
Его код при этом продолжит работать, но сторонним программам информацию о типах получить не удастся.
Если работа связана как раз с таким вот недокументированным проприетарным сервисом, я бы не стал браться.
bnk>Фига себе, это в 2021 году
ПО специфичное, разрабы в основном аппаратную часть развивают. А на софт забили.
W>>То на повестки дня стоит вопрос — можно ли из существующего сервера(сервер является DCOM сервером, в виде исполняемого файла) получить список компонентов поддерживаемый этим сервером, и получить список всех функций и список параметров функций?
bnk>В общем случае нет, но как правило с EXE или DLL поставляется так называемая "библиотека типов" (может быть зашита прямо в DLL например). bnk>Если такая библиотека имеется, то это возможно. Она имеется для большинства COM-серверов, потому как они для того и предназначены, чтобы предоставлять сервисы другим.
bnk>Однако бывают случаи когда разработчик сервиса не хочет показывать какие интерфейсы и параметры имеются, и может специально не включить библиотеку типов. bnk>Его код при этом продолжит работать, но сторонним программам информацию о типах получить не удастся.
А как узнать, есть ли в экзешнике такая библиотека типов?
Здравствуйте, wbear, Вы писали: W>А как узнать, есть ли в экзешнике такая библиотека типов?
Ну можно так попробовать:
1. Запустить OleView из Windows SDK, оно показывает зарегистрированные в системе библиотеки и их содержимое. Не знаю, может оно и со студией ставится, раньше ставилось.
выглядит как-то так
2. Если не нашлась (библиотека не зарегистрирована например), можно попробовать открыть в OleView твой .exe ("Open Type Library"). Если открылся, то библиотека внутри (она пакуется просто как ресурс).
3. Если нет, поискать файл с расширением .tlb или .olb в каталоге программы, если нашелся, попробовать открыть, открылся — это оно.
Еще подумал, что если речь про железо, может это какой-нибудь OPC-сервер?
Если так, разве там все интерфейсы не стандартизованы?
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, wbear, Вы писали:
W>>А как узнать, есть ли в экзешнике такая библиотека типов?
bnk>Ну можно так попробовать:
Скачал OleView.Exe. Запустил на станции и нашел несколько библиотек типов относящихся к моему софту.
Сейчас сижу разбираюсь что от чего и для чего.
bnk>Еще подумал, что если речь про железо, может это какой-нибудь OPC-сервер? bnk>Если так, разве там все интерфейсы не стандартизованы?
Работа с железом основывается на ISO OTX. И софта стороннего валом.
Разрабы комплекса идут следующим путем. Мы типа развиваем железо, даем минимальный софт для работы с ним, а если кто хочет чего покруче, то покупает софт у стороннего разработчика или пишет под себя что ему нужно(стандарт открытый делай чего хочеш)
В системе есть сервер который принимает от разных приложение сообщения и записывает их в лог.
В качестве тестового задания (делаю для себя что бы понять что и как работает) решил написать приложение, которое:
— подключается к СОМ серверу;
— посылает сообщение.
С помощью OleView нашел библиотеку типов для этого сервера.
Она выглядит следующим образом
Или вообще на VB, зачем тебе плюсы, чтобы тестировать (создай файл с расширением .vbs и дабл-кликни, т.е. запусти), ну или в Excel нажми F11 и введи в редакторе
Set bb = CreateObject("new:{11111111-2222-4F7F-A634-76C49721523D}")
session = bb.LogOn("BB->")
bb.Log(session, L"Missss")
bb.LogOff(session)
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, wbear, Вы писали:
W>>Где и в чем мой косяк?
bnk>А что не работает-то? Кстати код наверное можно сократить, как-то у тебя много там всего понаписано, можно короче: bnk>
Код пришлось писать из за того что он вставлялся в исходный код заказчика и на его компах.
bnk>
bnk>Или вообще на VB, зачем тебе плюсы, чтобы тестировать (создай файл с расширением .vbs и дабл-кликни, т.е. запусти), ну или в Excel нажми F11 и введи в редакторе
Спасибо за идею с использованием Ексела. Кое -что проверили на роботоспособность.