![]() |
|
|
![]()
|
|
| secondd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
ПОМОГИТЕ!!! pls.
Как правильно оъявить СОМ интерфейс другой программы, опрашивать его и записывать в него данные в Билдере? Приложил краткое описание СОМ интерфейса этой проги. Заранее благодарен. Присоединённый файл ( Кол-во скачиваний: 29 )
stcln_dev_guide.doc 54,50 Kb |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Вообще то по приведенному описанию очень трудно понять, как его использовать |
|||
|
||||
| EEEEEE |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 15.5.2006 Репутация: нет Всего: нет |
Ключевая фраза в описании:
"Программно интерфейс представляет собой COM класс StServer реализующий интерфейс IStServer и генерирующий события в диспетчериземый интерфейс _IStClient." Конечно нужно проверить, где находится изначально данный COM сервер. Не хватает файла *.tlb. Или *.срр + *.h. Можно последние попробовать получить в Import Component. Если IDE отработает нормально, в файле *.h ищи такую тираду: // *********************************************************************// // The following typedefs expose classes (named CoCoClassName) that // provide static Create() and CreateRemote(LPWSTR machineName) methods // for creating an instance of an exposed object. These functions can // be used by client wishing to automate CoClasses exposed by this // typelibrary. // *********************************************************************// Далее что-то типа такого // *********************************************************************// // COCLASS DEFAULT INTERFACE CREATOR // CoClass : WordOLEControl // Interface: TCOM_OLEControl // *********************************************************************// typedef TCoClassCreatorT<TCOM_OLEControl, _OLEControl, &CLSID_WordOLEControl, &IID__OLEControl> CoWordOLEControl; Тебе отсюда нужно CLSID_WordOLEControl и IID__OLEControl для CoCreateInstance, _OLEControl для указателя на интерфейс. CLSID_StServer и IID_IStServer условные в качестве примера. Примерно должно быть так...
|
|||
|
||||
| secondd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
Огромное спасибо! а теперь попробую во всем этом разобраться!
Думал все это проще! |
|||
|
||||
| secondd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
EEEEEE
Спасибо, вроде заработало!!!!! Еще вопросик: когда программа с комом включена, то все ОК, но если она не работает, то при попытке запустить этот код, помоему на CoCreateInstance, выдается ошибка Access violation at address 10004DB8 in module 'stcln.dll'. Read of address 0000000C. Как-нибудь можно сделать чтобы обрабатывать эту ошибку, а то программа вешается. 'stcln.dll' - это и есть библиотека COM. Это сообщение отредактировал(а) secondd - 1.2.2008, 14:17 |
|||
|
||||
| EEEEEE |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 15.5.2006 Репутация: нет Всего: нет |
Главное условие, чтобы COM-сервер был зарегистрирован.
Попробуй вставить такой фрагмент после кода, указанного выше.
|
||||
|
|||||
| secondd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 25.12.2007 Репутация: нет Всего: нет |
EEEEEE
Спасибо за советы, но не получается записать ошибку в Memo1, похоже при выключенной программе с COM сервером она вырубается на: HRESULT hr = CoCreateInstance(CLSID_StServer, NULL, CLSCTX_SERVER, IID_IStServer, (void**)&ptrIStServer); и дальше не идет, поэтому и в Memo1 не записывает. ЧТО ЗНАЧИТ COM ЗАРЕГИСТРИРОВАН? ГДЕ ПОСМОТРЕТЬ, В РЕЕСТРЕ? Заранее спасибо! |
|||
|
||||
| EEEEEE |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 15.5.2006 Репутация: нет Всего: нет |
Попробуй отыскать в реестре.
Странно. Неужто основная программа каждый раз регистрирует сервер автомацизации и потом его удаляет. Возможно необходимо зарегистртровать сервер самому и не запускать основную программу. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
А кто такая 'программа с комом'? А 'stcln.dll' (библиотека COM) - это COM сервер? Есть такое предположение, что собственно сервер это и есть та самая программа, которая 'программа с комом', а 'stcln.dll' (сервер COM) на самом деле клиент этой программы, которая сервер, но не COM. В таком случае проблема заключается в кривости 'stcln.dll' которая пытается присоединится к своему серверу не проверяя факта его работы, и если сервер не работает, то она падает, вместо того, что бы запустить соотвествующий exe'шник Выход один - проверять работу РЕАЛЬНОГО сервера до создания COM объекта, и если он не работает, то принудительно его запускать. |
|||
|
||||
| some2k7 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 4.4.2008 Репутация: нет Всего: нет |
Народ, подскажите пожалуйста по такой проблемке:
Пытаюсь использовать код, предоставленный EEEEEE (респект ему огромный) Наткнулся на такую ошибку: [C++ Error] Unit1.cpp(24): E2451 Undefined symbol 'CLSID_StServer' [C++ Error] Unit1.cpp(24): E2451 Undefined symbol 'IID_IStServer' Подскажите, откуда могут расти ноги? В unit1.h добавил строку: #import "stcln.dll" named_guids Ошибка рождается в результате выполнения следующего куска:
Заранее спасибо за помощь |
|||
|
||||
| Usya |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Здравствуйте!
Новую тему открывать не стал - просто вопрос из той-же оперы. С оъявлением СОМ интерфейса понятно... Как реализовать подключение к событиям _IStClient - просто вывести на экран что-нибудь из полученных данных. Раньше с COM-ом не работал :( Перелопачивать с нуля тяжеловато. Буду благодарен за любой приведенный код. P/s Из описания:
--------------------
Я не волшебник, я только учусь... |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Читать MSDN по ключевым словам IConnectionPointContainer и IConnectionPoint Architecture of Connectable Objects |
|||
|
||||
| Usya |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Когда что-то начинаешь изучать с нуля, на русском не всегда понятно что к чему и почему, а про английский и говорить не приходится :(
--------------------
Я не волшебник, я только учусь... |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
|
||||
|
|||||
| Usya |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Спасибо!
Буду пробовать. Позже напишу, что получилось. Это сообщение отредактировал(а) Usya - 16.11.2008, 01:40 --------------------
Я не волшебник, я только учусь... |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |