Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зацепить Dll, Динамически подцеплять динамические би.. 
:(
    Опции темы
eof
  Дата 30.5.2003, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.5.2003

Репутация: нет
Всего: нет



Друзья!
расскажите плз. как сделать следующее:
на одном компе есть набор Dll (ActiveX Library),
на другом компе есть прога которая должна использовать некоторые из тех самых dllей с другого компа... причем какие именно проге становиться известно только во время выполнения...
короче Guidы интерфейсов я узнаю только во время выполнения. Все интерфейсы одинаковы по набору методов (имена и идентификаторы методов одинаковы и известны). Каким образом я могу выполнить какойньть метод в проге (заранее не декларируя интерфейсов)...
во блин...
PM MAIL   Вверх
Fantasist
Дата 30.5.2003, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
Каким образом я могу выполнить какойньть метод в проге (заранее не декларируя интерфейсов)...


Если не декларируя то IDispatch. Другими словами в Делфи - variant.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
eof
Дата 30.5.2003, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.5.2003

Репутация: нет
Всего: нет



С задачей я справился сфмостоятельно но частично, и как обычно бывает вопросов только прибавилось...sad.gif
1. Замучился искать мне дураку понятные примеры с методом Invoke. К сожалению не получилось его использовать (пришлось обойтись). Мне кажеться у меня проблема с передачей параметров метода (даже когда их и нет). Кто может, побалуйте хорошим примером плз.
2. Удаленно прога не находит сервера автоматизации, хотя для создания объекта использую метод CreateRemoteComObject и добавил удаленный компьютер в Службы компонентов. Что я не доделал, друзья, ну хоть намекните плз...
PM MAIL   Вверх
eof
Дата 30.5.2003, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.5.2003

Репутация: нет
Всего: нет



Fantasist, все так и сделал, но с пропертями проблема, они не хотят работать в виде Variant (ругаются что неверный параметр...), да и разобраться с Invoke, наверное, было бы правильние...
PM MAIL   Вверх
Fantasist
Дата 30.5.2003, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
они не хотят работать в виде Variant (ругаются что неверный параметр...), да и разобраться с Invoke, наверное, было бы правильние...


Работа с Variant значительно удобнее. Разбираться с GetIDsOfNames и Invoke, может где-то и имеет смысл, но не думаю, что в прикладных задачах. При работе через variant компилятор сам сгенерит код для вызова GetIDsOfNames и Invoke, и если через variant не работает, то не заработает и при ручном вызове. Разве что при глюке в компиляторе, в чем я лично сильно сомневаюсь.

Цитата
2. Удаленно прога не находит сервера автоматизации, хотя для создания объекта использую метод


Какую ошибку выдает?




--------------------
Волны гасят ветер...
PM MAIL   Вверх
man2002ua
Дата 30.5.2003, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Fantasist, давай пример работы мс судаленнным актив икс1! Пожалустав!


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
eof
Дата 2.6.2003, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.5.2003

Репутация: нет
Всего: нет



Fantasist Класс не зарегистрирован (по русски на Win2000 Pro Rus)
PM MAIL   Вверх
eof
Дата 2.6.2003, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.5.2003

Репутация: нет
Всего: нет



Через Variant методы выпоняются на ура. но с пропертями беда. Пишет что параметр неверно задан или чтото типа элемент отсутствует в группе.
И еще приходиться извращаться чтобы создать экземпляр. если делать влоб, то вылетает ошибка о том что variant doesn't reference an automation object....
Ну никак не врублюсь как это работает, чтож я такой тупой то...
PM MAIL   Вверх
Fantasist
Дата 2.6.2003, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
Класс не зарегистрирован


Это ошибка самая простая и понятная и означает именно это - класс не зарегистрирован. То есть виндос не может найти в реестре ключи для твоего объекта. Класс надо зарегестрировать (например программкой regsvr32).


Цитата
Пишет что параметр неверно задан или чтото типа элемент отсутствует в группе


Это скорее всего, ты неправильно написал имя проперти, если это ексепшен на обращение к ней. Правда, может быть, сам ActiveX выдает ошибку из-за неправильного с ним обращения. Конкретно без ошибки тяжело сказать.

Цитата
И еще приходиться извращаться чтобы создать экземпляр. если делать влоб, то вылетает ошибка о том что variant doesn't reference an automation object....


Как же ты его создаешь?

Variant - это вообще структура (запись, record) в которой первое поле - тип хранимого значение. В это поле записывается varDispatch, если ты присваеваешь значение типа IDispatch. После этого, в run-time, при попытке вызвать метод (проперти) через эту переменную проверяется, если это поле не равно varDispatch, то выбрасывается эта ошибка.

Проверить, что за тип храниться в вариант, можно так:
Код

var
 v:variant
begin
......
TVarData(v).vType;
....
end;



--------------------
Волны гасят ветер...
PM MAIL   Вверх
eof
Дата 3.6.2003, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.5.2003

Репутация: нет
Всего: нет



Fantasist Спасибо за рассказ про Variant... это многое объясняет. Пропертя работают, но не все... не могу использовать проперть типа TGuid (на ней то и материться про "Параметр задан неверно").
Создавать экземпляр было тяжело, но потом догадался:
var
y: Variant;
begin
y := CreateRemoteComObject('CompName', CLASS_dll) as IDispatch;
без приведения к IDispatch надо было извращаться.
Но самая проблема это про "Класс не зарегестрирован". я еще раз хочу отметить что dll находиться на др. компе (в одном домене). в хелпе прочитал про настройки службы компонентов. вроде бы все сделал, но... не выходит. Расскажи плз. как регестрить dll которые на др. компе?

PM MAIL   Вверх
Fantasist
Дата 3.6.2003, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
y := CreateRemoteComObject('CompName', CLASS_dll) as IDispatch;
без приведения к IDispatch надо было извращаться.


Это потому, что CreateRemoteComObject возвращает IUnknown, и в variant попадает указатель на интерфейс IUnknown (в поле типа записывается varUnknown)

Цитата
как регестрить dll которые на др. компе?


Что значит на другом? Регестрировать точно так же, как и на этом.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
eof
Дата 3.6.2003, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.5.2003

Репутация: нет
Всего: нет



Я понял все! (или почти всеsmile.gif) о как в начале заблуждался я...
Спасибо.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.