помогли в другом форуме (Eugene Sukhodolin), может кому понадобится —
Вопрос: что же на самом деле передает VB вот этой строкой Set MyObject = > SomeActiveXcontrol,
Всё очень просто — передаётся extender object, что-то типа обёртки, создаваемой
VB для каждого контрола.
> я так понимаю — ссылку на coclass, но как из него вытянуть этот интерфейс? > и как все таки выделить ссылку на IOleObject из того что передается? > Может быть надо заставлять каким0то образом VB передавать нужное?
Знатоки, требуется ваша помощь
проблема:
есть функция-событие в которую передается обьект ActiveX как аргумент —
OnMyFunc(var MyObject : IDispatch (пробовал и с OleVariant — это все равно
то же самое))
В эту функцию Visual Basic передает ссылку на некоторый ActiveX контрол —
procedure OnMyFunc(MyObject as Object)
Private Sub Mycontrol_OnMyFunc(ByVal MyObject As Object)
Set MyObject = SomeActiveXcontrol
End Sub
после того как ссылка на ActiveX передана в тело функции, из него надо
получить интерфейс на стандартнейший интерфейс — IOleObject. Но его
MyObject.QueryInterface(IOleObject, FOleObject) не берет, возвращая ошибку
No such interface supported
Экстрагирование из IDispatch интерфейса IUnknown и потом из него IoleObject — также не помогло.
Вопрос: что же на самом деле передает VB вот этой строкой Set MyObject =
SomeActiveXcontrol,
я так понимаю — ссылку на coclass, но как из него вытянуть этот интерфейс?
и как все таки выделить ссылку на IOleObject из того что передается?
Может быть надо заставлять каким-то образом VB передавать нужный интерфейс?
Здравствуйте Harley, Вы писали:
H>OnMyFunc(var MyObject : IDispatch (пробовал и с OleVariant — это все равно H>то же самое)) H>В эту функцию Visual Basic передает ссылку на некоторый ActiveX контрол -
H>procedure OnMyFunc(MyObject as Object) H>Private Sub Mycontrol_OnMyFunc(ByVal MyObject As Object) H> Set MyObject = SomeActiveXcontrol H>End Sub
H>после того как ссылка на ActiveX передана в тело функции, из него надо H>получить интерфейс на стандартнейший интерфейс — IOleObject. Но его H>MyObject.QueryInterface(IOleObject, FOleObject) не берет, возвращая ошибку H>No such interface supported
мож действительно нет.. А в Object Viewer нужный интерфейс есть?
H>Экстрагирование из IDispatch интерфейса IUnknown и потом из него IoleObject — также не помогло. H>Вопрос: что же на самом деле передает VB вот этой строкой Set MyObject = H>SomeActiveXcontrol, H>я так понимаю — ссылку на coclass, но как из него вытянуть этот интерфейс? H>и как все таки выделить ссылку на IOleObject из того что передается? H>Может быть надо заставлять каким-то образом VB передавать нужный интерфейс?
какая дельфя? IOleObject может оказаться IOleObject_D4
Здравствуйте vav, Вы писали:
vav>Здравствуйте Harley, Вы писали:
H>>OnMyFunc(var MyObject : IDispatch (пробовал и с OleVariant — это все равно H>>то же самое)) H>>В эту функцию Visual Basic передает ссылку на некоторый ActiveX контрол -
H>>procedure OnMyFunc(MyObject as Object) H>>Private Sub Mycontrol_OnMyFunc(ByVal MyObject As Object) H>> Set MyObject = SomeActiveXcontrol H>>End Sub
H>>после того как ссылка на ActiveX передана в тело функции, из него надо H>>получить интерфейс на стандартнейший интерфейс — IOleObject. Но его H>>MyObject.QueryInterface(IOleObject, FOleObject) не берет, возвращая ошибку H>>No such interface supported vav>мож действительно нет.. А в Object Viewer нужный интерфейс есть?
все есть, я пробовал на проверенном ActiveX, к тому же практически все контролы поддерживают этот интерфейс,
это "душа" визального контрола, он без него не может на форме держаться.
H>>Экстрагирование из IDispatch интерфейса IUnknown и потом из него IoleObject — также не помогло. H>>Вопрос: что же на самом деле передает VB вот этой строкой Set MyObject = H>>SomeActiveXcontrol, H>>я так понимаю — ссылку на coclass, но как из него вытянуть этот интерфейс? H>>и как все таки выделить ссылку на IOleObject из того что передается? H>>Может быть надо заставлять каким-то образом VB передавать нужный интерфейс?
vav>какая дельфя? IOleObject может оказаться IOleObject_D4
Дело по моему не Делфе, в Делфи есть Tolecontainer, который спокойно создает тот же ActiveX и берет и знего IOleObject,
но если обрабатывать ссылку на существующий ActiveX (уже созданный) — начинается проблема. Тут нужен ответ на 2 вопроса:
1. Что же передается при работе это функции:
Private Sub Mycontrol_OnMyFunc(ByVal MyObject As Object)
Set MyObject = SomeActiveXcontrol
End Sub
Или как сделать так чтобы передавался управляющий IUnknown (я пробовал и такой способ, но в VB появляется Private Sub Mycontrol_OnMyFunc(ByVal MyObject As O(!!!!!)) — гбчная строка, которая не дает компилировать проект
)