Interfaces
От: Tremasov Великобритания www.smartcodetech.com
Дата: 27.08.03 15:27
Оценка:
Привет всем!

Имеется COM-объект, сделанный на D7, в котором имеется интерфейс с методом
(функция), возвращающим объект MyObject в OleVariant'e. MyObject
поддерживает интерфейс IMyObject, который является наследником от IUnknown,
но описания этого интерфейса в библиотеке типов нет.

Вопрос такой: можно ли работать с этим интерфейсом из Visual Basic / Delphi
через позднее связывание?
Если да, то как. Киньте пример если несложно.


Огромное спасибо.
Re: Interfaces
От: George Seryakov Россия  
Дата: 27.08.03 15:56
Оценка:
Здравствуйте, 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)


Главное — так написать вызов, чтобы сгенерированный по нему вызов диспатча был корректным. Если библиотеки типов нет, то нужно посмотреть в коде.
GS
Re[2]: Interfaces
От: Tremasov Великобритания www.smartcodetech.com
Дата: 27.08.03 16:20
Оценка:
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 !!!
Re[3]: Interfaces
От: George Seryakov Россия  
Дата: 27.08.03 17:04
Оценка:
Здравствуйте, 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?
GS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.