Помогите разобраться с примером у Edanmo...

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

Помогите разобраться с примером у Edanmo...

Сообщение zHackLeX » 24.01.2007 (Ср) 1:26

Согласно своему названию, пример (около 40 кб)
http://www.mvps.org/emorcillo/download/vb6/com_disp.zip
занимается
Adding methods and properties at run-time with IDispatch

Однако у меня на компе он занимается бОльшим безобразием, а именно - при попытке запуска бейсик меня грубо обламывает ошибкой, что ActiveX component, значит, can't create object. Происходит это в модуле TestClass, а именно в Class_Initialize...

Объясните пожалуйста человеку неискушённому, что это значит?
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2007 (Ср) 6:55

Что ты забыл что-то зарегистрить. Правда ведь забыл? ;-)
Изображение

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

Сообщение zHackLeX » 24.01.2007 (Ср) 11:08

Что-то я по-моему не понимаю...
В DispHook проекте есть только одна нестандартная библа
в references - Edanmo's OLE Interfaces and functions.
Но это же TLB, её регить нельзя...
:?
There is no knowledge that is not power...

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

Конь
Постоялец
Постоялец
 
Сообщения: 651
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 24.01.2007 (Ср) 11:29

У меня без регов работает...
Подпись находится в стадии разработки...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.01.2007 (Ср) 11:39

regtlib однако 8)

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

Сообщение zHackLeX » 24.01.2007 (Ср) 17:53

блин нету regtlib'a...
Странно... говоришь без регов все пахало?
а какой у тебя версии olelib.tlb?
There is no knowledge that is not power...

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

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.01.2007 (Ср) 18:00

regtlib.exe находится в корневом каталоге виндоус, у меня в C:\WINNT

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2007 (Ср) 18:40

zHackLeX писал(а):Что-то я по-моему не понимаю...
В DispHook проекте есть только одна нестандартная библа
в references - Edanmo's OLE Interfaces and functions.

Неправда, ещё есть DispHook.dll, и её нужно зарегить.

TLB, действительно, регить не нужно.
Изображение

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

Сообщение zHackLeX » 25.01.2007 (Чт) 17:04

Огромное спасибо Тёмыч... че т я протормозил...
Кстати у него же в примерах про события - это опечатка в проге, когда он там Sub-подпрограмму вызывает как функцию?
Да, ещё хотел спросить - TLB-файлы надо с дистрибутивом таскать?
There is no knowledge that is not power...

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

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 25.01.2007 (Чт) 17:05

нет

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.01.2007 (Чт) 18:04

zHackLeX писал(а):примерах про события - это опечатка в проге, когда он там Sub-подпрограмму вызывает как функцию?

А где там? нет желания сейчас весь код вычитывать.
Изображение

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

Сообщение zHackLeX » 25.01.2007 (Чт) 18:49

lResult = oDispatch.Invoke(lDISPID, IID_NULL, 0, INVOKE_FUNC, DISPPARAMS, VarPtr(vResult), EXCEPINFO, lArgErr)
Причём Invoke там по всем признакам Sub а не Function...

Да и ещё вопрос по Эданмо -
в его EventCollection - пытаюсь я значит добавить его коллекцию с событиями к себе, пытаюсь перепихать все контролы своей формы в эту коллекцию чтобы потом портировать события в процедуры скрипта... и узнаю что Object, как бы мне того не хотелось, всё равно does not support this action. Обидно что контролы не поддерживают эту рекламную акцию... А есть способ это обойти?
И ещё -- переменной типа VBControlExtender вообще что-нибудь можно присвоить кроме Controls.Add ?
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.01.2007 (Чт) 19:37

Воистину, Invoke -- это функция, возвращающая HRESULT.
Изображение

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

Сообщение zHackLeX » 26.01.2007 (Пт) 11:58

эээ...
Я понимаю что вообще-то Invoke возвращает HRESULT, но там-то она описана как Sub, и VB не компилирует её...

Object Browser писал(а):Sub Invoke(dispidMember As Long, riid As UUID, lcid As Long, wFlags As Integer, pDispParams As DISPPARAMS, pVarResult As Long, pExcepInfo As EXCEPINFO, puArgErr As Long)
Member of olelib.IDispatch

А как быть с событиями?
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.01.2007 (Пт) 17:35

zHackLeX писал(а):эээ...
Я понимаю что вообще-то Invoke возвращает HRESULT, но там-то она описана как Sub, и VB не компилирует её...

Ага, есть такой косяк... Наверное, надо убрать все строки ниже вызова Invoke: обработку ненулевого HRESULT вставит сам VB.
Изображение

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

Сообщение zHackLeX » 26.01.2007 (Пт) 22:39

да эт я уже все сам пофиксил...
вопрос-то уже про коллекцию с событиями - как оформить в неё контролы с формы?
Почему там Object does not support this action? Тут опять бродит Облом?
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.01.2007 (Пт) 22:41

Я туда не смотрел, но подозреваю, что потому, что у них нет TypeInfo :roll:
Изображение

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

Сообщение zHackLeX » 26.01.2007 (Пт) 22:43

Да... у них нет Typeinfo... эт я знал...
А нельзя сгенерить TypeInfo и подсунуть его по запросу?
Т. е. выудить из vb6.olb?
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.01.2007 (Сб) 8:01

Не знаю. Раз в его тестовом примере CommandButton обёрнут в собственный класс, может и тебе сделать так же?
Изображение

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

Сообщение zHackLeX » 27.01.2007 (Сб) 10:28

Да уж... ранняя связка, никаких TypeInfo, быстрее...
... и по обёртке на элемент управления. Выходит, в общем виде задачи не решить?






Когда-то я загонялся получением списков свойств/методов для элементов VB в период его выполнения в ЕХЕшнике. Теперь я эту проблему решил, все свойства/методы подгружаются. Как теперь вот с событиями быть...
...блин, жалко мелкомягким было сделать всё как в дельфях?!
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.01.2007 (Вс) 12:21

zHackLeX писал(а):...блин, жалко мелкомягким было сделать всё как в дельфях?!

Это ты случайно не про Dream Scripter? ;-)


Как показали мои эксперименты, подключиться к событиям стандартных контролов можно, но сложно, потому что там исходящий интерфейс не диспатчевый, и плюс к тому свой для каждого контрола. Т.е. нужно сделать одну здоровенную vtbl, в которой все члены указывают в одно место, и чтобы это место по каким-то своим хитрым таблицам высчитывало, какое событие на самом деле вызвано и с какими параметрами. Да ещё и стек правило, как положено, потому что число параметров разное. Скажи, не будет ли намного проще сделать десяток классов-обёрток? ;-)
Изображение

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

Сообщение zHackLeX » 28.01.2007 (Вс) 12:37

Ладно... жалко.
Значит обёртки. Ну раз количество стандартных элементов неизменно... то вполне реально... даже можно общую обёртку сделать из нескольких, она будет с кучей If TypeOf Is... в инициализации
Сделаю пока так... а любой ОСХ наверное сам по себе заработает, у него ж TypeInfo есть
Кстати, а что за странная структура у VB6.OLB? Почему там есть т.н. "xxxEvents" - информация о событиях отдельно? Это никак нельзя использовать самому?
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.01.2007 (Вс) 12:46

zHackLeX писал(а):Кстати, а что за странная структура у VB6.OLB? Почему там есть т.н. "xxxEvents" - информация о событиях отдельно? Это никак нельзя использовать самому?

Да, это и есть те самые исходящие интерфейсы. Как видишь, они все недиспатчевые.
Изображение

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

Сообщение zHackLeX » 28.01.2007 (Вс) 18:12

Мда... Пойду хоть проверю - будут ли ловиться события с ОСХов (как VBшных так и нет)...
Ещё хочу спросить - TreeView1.object - ??? как использовать эту переменную? Она эквивалентна самому TreeView1?

В дельфях (разбираюся я в них значительно хуже VB, DreamScripter даже не видел :( ) вообще замечательно - .OnClick:=MyClickProc;
Однако в дельфях есть свои минусы.
Что я ненавижу - так это то, что объект из дельфей VB- программе передать в общем случае эээ... как бы помягче сказать... ну очень тяжело.

ЗЫ. сорри за оффтоп.
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.01.2007 (Вс) 22:33

zHackLeX писал(а):Ещё хочу спросить - TreeView1.object - ??? как использовать эту переменную? Она эквивалентна самому TreeView1?

Эквивалентна его Me. А сама TreeView1 эквивалентна его UserControl.Extender (в частности, поддерживает только позднее связывание).

zHackLeX писал(а):В дельфях (разбираюся я в них значительно хуже VB, DreamScripter даже не видел :( ) вообще замечательно - .OnClick:=MyClickProc;
Однако в дельфях есть свои минусы.
Что я ненавижу - так это то, что объект из дельфей VB- программе передать в общем случае эээ... как бы помягче сказать... ну очень тяжело.

Вот именно эту задачу и реализует DreamScripter :-D
Изображение

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

Сообщение zHackLeX » 28.01.2007 (Вс) 23:03

Оп-па. А он с исходниками?
Видел статью Анатолия Тенцера про реализацию IDIspatch...

Давно думал над тем, как заставить взаимодействовать дельфовский объект, например, с ОСХ-контролом, сделанным на VB. Но за отсутствием документации по модулю TypInfo дело встало, потом (как всегда внезапно) сессия... короче опять я в оффтоп полез. Спасибо за разъяснения.

ЗЫ. А всё-таки получить списки свойств-методов - не проблема -- достаточно, как показывает практика, просто подгрузить VB6.olb, и дёрнуть их оттуда.
А вот можно ли отловить списки свойств/методов ФОРМЫ? Ведь там можно наделать своих методов-свойств... Не знаешь, можно ли это реализовать?
А то раньше я делал так - перед компиляцией формировал эти списки из IDE, где эта информация доступна прямо и просто - с помощью Typelib information...
There is no knowledge that is not power...

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.01.2007 (Вс) 23:17

zHackLeX писал(а):Оп-па. А он с исходниками?

Вроде бы нет. Плюс к тому, он платный ;-)

zHackLeX писал(а):А вот можно ли отловить списки свойств/методов ФОРМЫ? Ведь там можно наделать своих методов-свойств... Не знаешь, можно ли это реализовать?
А то раньше я делал так - перед компиляцией формировал эти списки из IDE, где эта информация доступна прямо и просто - с помощью Typelib information...

Нет, не знаю.
Изображение

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

Сообщение zHackLeX » 29.01.2007 (Пн) 11:10

Да, и ещё один (совсем уж оффтопный) вопросик -
кроме VB можно хоть на одном языке реализовать возможность отобразить немодальное окно из DLL или ОСХ? Везде где пробовал (дельфы, си-шарп...) - обломы. Можно ли разрулить?
There is no knowledge that is not power...

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


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

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

Сейчас этот форум просматривают: серверянин и гости: 2

    TopList