Здравствуйте, Tremasov, Вы писали:
T>Имеется COM-объект, сделанный на D7, в котором имеется интерфейс с методом
T>(функция), возвращающим объект MyObject в OleVariant'e. MyObject
T>поддерживает интерфейс IMyObject, который является наследником от IUnknown,
T>но описания этого интерфейса в библиотеке типов нет.
T>Вопрос такой: можно ли работать с этим интерфейсом из Visual Basic / Delphi
T>через позднее связывание?
Да. Если интерфейс унаследован от IDispatch и диспатч реализован правильно.
T>Если да, то как. Киньте пример если несложно.
set myobj = yourobj.GetMyObj
msgbox myobj.mymethod(my_params)
Главное — так написать вызов, чтобы сгенерированный по нему вызов диспатча был корректным. Если библиотеки типов нет, то нужно посмотреть в коде.
T>>Вопрос такой: можно ли работать с этим интерфейсом из Visual Basic / Delphi
T>>через позднее связывание?
GS> Да. Если интерфейс унаследован от IDispatch и диспатч реализован правильно.
Что имеется ввиду под "правильно"? Класс, реализующий интерфейс, унаследованный от IDispatch, является наследником TComponent, и в нем реализованы только методы этого самого интерфейса. Больше ничего. Единственный момент: интерфейс описан как IMyIntf = interface(IDispatch), а не как IMyIntf = dispinterface.
T>>Если да, то как. Киньте пример если несложно.
GS>GS>set myobj = yourobj.GetMyObj
GS>msgbox myobj.mymethod(my_params)
GS>
Пока поробовал из Delphi — не работает. Ругается, что "EOleSysError: not implemented" на myobj.mymethod.
Please HELP !!!
Здравствуйте, Tremasov, Вы писали:
T>>>Вопрос такой: можно ли работать с этим интерфейсом из Visual Basic / Delphi
T>>>через позднее связывание?
GS>> Да. Если интерфейс унаследован от IDispatch и диспатч реализован правильно.
T>Что имеется ввиду под "правильно"?
Дуальный интерфейс, то есть. На каждый MyMethod обычного интерфейса есть код, обрабатиывающий Invoke с этим именем и тем же набором параметров.
T>Класс, реализующий интерфейс, унаследованный от IDispatch, является наследником TComponent, и в нем реализованы только методы этого самого интерфейса. Больше ничего. Единственный момент: интерфейс описан как IMyIntf = interface(IDispatch), а не как IMyIntf = dispinterface.
Кто ж его знает, этот дельфи, что там написано...
GS>>GS>>set myobj = yourobj.GetMyObj
GS>>msgbox myobj.mymethod(my_params)
GS>>
T>Пока поробовал из Delphi — не работает. Ругается, что "EOleSysError: not implemented" на myobj.mymethod.
Кул. А у тебя в интерфейсе есть метод mymethod?