Re[2]: ActiveX: как добраться до IOleObject?
От: Harley Финляндия 9rays.net
Дата: 17.03.02 16:50
Оценка:
Здравствуйте 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(!!!!!)) — гбчная строка, которая не дает компилировать проект
)
WBR,
Harley
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.