![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
Друзья!
расскажите плз. как сделать следующее: на одном компе есть набор Dll (ActiveX Library), на другом компе есть прога которая должна использовать некоторые из тех самых dllей с другого компа... причем какие именно проге становиться известно только во время выполнения... короче Guidы интерфейсов я узнаю только во время выполнения. Все интерфейсы одинаковы по набору методов (имена и идентификаторы методов одинаковы и известны). Каким образом я могу выполнить какойньть метод в проге (заранее не декларируя интерфейсов)... во блин... |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Если не декларируя то IDispatch. Другими словами в Делфи - variant. -------------------- Волны гасят ветер... |
|||
|
||||
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
С задачей я справился сфмостоятельно но частично, и как обычно бывает вопросов только прибавилось...
1. Замучился искать мне дураку понятные примеры с методом Invoke. К сожалению не получилось его использовать (пришлось обойтись). Мне кажеться у меня проблема с передачей параметров метода (даже когда их и нет). Кто может, побалуйте хорошим примером плз. 2. Удаленно прога не находит сервера автоматизации, хотя для создания объекта использую метод CreateRemoteComObject и добавил удаленный компьютер в Службы компонентов. Что я не доделал, друзья, ну хоть намекните плз... |
|||
|
||||
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
Fantasist, все так и сделал, но с пропертями проблема, они не хотят работать в виде Variant (ругаются что неверный параметр...), да и разобраться с Invoke, наверное, было бы правильние...
|
|||
|
||||
| Fantasist |
|
||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Работа с Variant значительно удобнее. Разбираться с GetIDsOfNames и Invoke, может где-то и имеет смысл, но не думаю, что в прикладных задачах. При работе через variant компилятор сам сгенерит код для вызова GetIDsOfNames и Invoke, и если через variant не работает, то не заработает и при ручном вызове. Разве что при глюке в компиляторе, в чем я лично сильно сомневаюсь.
Какую ошибку выдает? -------------------- Волны гасят ветер... |
||||
|
|||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
Fantasist, давай пример работы мс судаленнным актив икс1! Пожалустав!
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
Fantasist Класс не зарегистрирован (по русски на Win2000 Pro Rus)
|
|||
|
||||
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
Через Variant методы выпоняются на ура. но с пропертями беда. Пишет что параметр неверно задан или чтото типа элемент отсутствует в группе.
И еще приходиться извращаться чтобы создать экземпляр. если делать влоб, то вылетает ошибка о том что variant doesn't reference an automation object.... Ну никак не врублюсь как это работает, чтож я такой тупой то... |
|||
|
||||
| Fantasist |
|
||||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Это ошибка самая простая и понятная и означает именно это - класс не зарегистрирован. То есть виндос не может найти в реестре ключи для твоего объекта. Класс надо зарегестрировать (например программкой regsvr32).
Это скорее всего, ты неправильно написал имя проперти, если это ексепшен на обращение к ней. Правда, может быть, сам ActiveX выдает ошибку из-за неправильного с ним обращения. Конкретно без ошибки тяжело сказать.
Как же ты его создаешь? Variant - это вообще структура (запись, record) в которой первое поле - тип хранимого значение. В это поле записывается varDispatch, если ты присваеваешь значение типа IDispatch. После этого, в run-time, при попытке вызвать метод (проперти) через эту переменную проверяется, если это поле не равно varDispatch, то выбрасывается эта ошибка. Проверить, что за тип храниться в вариант, можно так:
-------------------- Волны гасят ветер... |
||||||||
|
|||||||||
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
Fantasist Спасибо за рассказ про Variant... это многое объясняет. Пропертя работают, но не все... не могу использовать проперть типа TGuid (на ней то и материться про "Параметр задан неверно").
Создавать экземпляр было тяжело, но потом догадался: var y: Variant; begin y := CreateRemoteComObject('CompName', CLASS_dll) as IDispatch; без приведения к IDispatch надо было извращаться. Но самая проблема это про "Класс не зарегестрирован". я еще раз хочу отметить что dll находиться на др. компе (в одном домене). в хелпе прочитал про настройки службы компонентов. вроде бы все сделал, но... не выходит. Расскажи плз. как регестрить dll которые на др. компе? |
|||
|
||||
| Fantasist |
|
||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Это потому, что CreateRemoteComObject возвращает IUnknown, и в variant попадает указатель на интерфейс IUnknown (в поле типа записывается varUnknown)
Что значит на другом? Регестрировать точно так же, как и на этом. -------------------- Волны гасят ветер... |
||||
|
|||||
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
Я понял все! (или почти все
Спасибо. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |