Передача объекта внешнему ActiveX-EXE

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Передача объекта внешнему ActiveX-EXE

Сообщение zHackLeX » 26.09.2007 (Ср) 3:18

Всем доброго времени суток, быстрой отладки и долгого отдыха!
Собственно сабж.
Есть ActiveX EXE, где есть public class CClient, у которого есть метод SetObject(myObj)
Спрашивается, как вызвать этот метод с параметром - объектом private-класса из другого Standard EXE проекта?
Есть спец. класс в StdEXE, реализующий описанный в ActiveX EXE интерфейс. Экземпляр этого класса пытаемся передать в ActiveX EXE, и
VB ругается: A property or method call cannot include a reference to a private object, either as an argument or as a return value.

Возможно ли в принципе, не создавая ActiveX-EXE, передать свой объект в ActiveX-Exe?

ActiveX-EXE написан мной же. Это если возможно, например, похимичить с указателями, в чем я не силён...

Хотелось бы заиметь представление о причинах ограничения и о вариантах обхода оного...

Заранее спасибо.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.09.2007 (Ср) 9:20

Возможно ли в принципе, не создавая ActiveX-EXE, передать свой объект в ActiveX-Exe?
Нет.
Хотелось бы заиметь представление о причинах ограничения и о вариантах обхода оного...

Причина ограничения очевидна - чтобы не было доступа к приватным объектам извне.

Можешь попытаться передать их наружу через скриптконтрол. StdEXE создает скриптконтрол, добавляет в него свои объекты, через SetObject передает скриптконтрол в ActiveX, тот добавляет скрипт, в котором участвует нужный объект, и выполняет его. Соответственно код нужно строить так, чтобы все тяжелые расчеты выполнялись в ActiveX, а в скриптконтрол только результат и код для его передачи StdEXE-объекту.
Лучший способ понять что-то самому — объяснить это другому.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 26.09.2007 (Ср) 11:44

Хм... Да, передача объекта невозможна в принципе.
Попытка сделать New ScriptControl в StdEXE, пихнуть туда объект,
после чего передать сам скриптконтрол, и уже в ActiveXExe вытащить
объект обратно потерпела неудачу. Впрочем, это было ожидаемо, по уже разъяснённой Вами причине. Разумеется, в момент ScrCtl.Eval("MyObj") произошла ошибка.
Не знаю, возможно ли похитрить с указателями...
потому что
CopyMemory myClient.ObjRef, myObj, 4&
не работает - myClient.ObjRef остаётся nothing.....

В любом случае, спасибо за участие... Придётся, наверное, делать ActiveX-EXE клиент...
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 26.09.2007 (Ср) 12:35

Можно передать приватный класс в activex

Для этого нужно передать адрес класса, а в activex тоже добавить модуль этого класса и с помощью copymemory подменить новый экземпляр на переданный адрес. Я так в своё время делал, НО ЭТО КРИВО И НЕПРАВИЛЬНО, И МОЖЕТ ПРИВЕСТИ К ПАДЕНИЮ ПРОГРАММЫ (хотя у меня работало)
Программисты не глючат - глючат компиляторы...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.09.2007 (Ср) 13:05

Разумеется, в момент ScrCtl.Eval("MyObj") произошла ошибка.
Какая?
Лучший способ понять что-то самому — объяснить это другому.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 26.09.2007 (Ср) 13:53

Передать можно через Object, ибо Object - эт тот же указатель по сути своей.
З.Ы. Кстати, через CopyMemory должно работать, какая ошибка выплывает?
Весь мир матрица, а мы в нем потоки байтов!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.09.2007 (Ср) 16:39

Для этого нужно передать адрес класса, а в activex тоже добавить модуль этого класса и с помощью copymemory подменить новый экземпляр на переданный адрес. Я так в своё время делал, НО ЭТО КРИВО И НЕПРАВИЛЬНО, И МОЖЕТ ПРИВЕСТИ К ПАДЕНИЮ ПРОГРАММЫ (хотя у меня работало)


Это не криво и правильно, если делать это с пониманием того, что происходит, и учитывать то, что часть работы по контролю за числом ссылок VB теперь делать не будет, а значит надо позаботиться об этом самим.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 26.09.2007 (Ср) 18:06

Хакер писал(а):Это не криво и правильно, если делать это с пониманием того, что происходит, и учитывать то, что часть работы по контролю за числом ссылок VB теперь делать не будет, а значит надо позаботиться об этом самим.


Если бы дело было только в возвращении подменённого класса, то это ерунда.
Ещё если произойдут изменения в классе, который подменяется, то необходима перекомпиляция обоих проектов, хотя у меня со временем он стал валиться даже после синхронной перекомпиляции.
Программисты не глючат - глючат компиляторы...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 17

    TopList