Как Получить интерфейс
От: Аноним  
Дата: 13.11.10 14:39
Оценка:
Господа, я в VB совсем тупой, так что поможите плиз кто как может
есть соm объект написанный на C++

описан он примерно так

dispinterface IMyInterface
{
properties:
methods:
  [id(1), helpstring("Method1")]
  long Method1()
};

dispinterface IMyInterface2
{
properties:
methods:
  [id(2), helpstring("Method2")]
  long Method2()
};

coclass MyClass
{
  [default] dispinterface IMyInterface;
  dispinterface IMyInterface2;
};

так вот в коде на VB сделано следующее


Public WithEvents MyInterfase As MyLib.MyClass

и дальше спокойно вызывается метод Method1()
сейчас мне надо вызвать метод Method2()... но у меня никак не получается взять интерфейс IMyInterface2, подскажите пожалуйста как это надо сделать
Re: Как Получить интерфейс
От: Vi2 Удмуртия http://www.adem.ru
Дата: 13.11.10 14:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>и дальше спокойно вызывается метод Method1()

А>сейчас мне надо вызвать метод Method2()... но у меня никак не получается взять интерфейс IMyInterface2, подскажите пожалуйста как это надо сделать

Никак. VB не работает с dispinterface, он работает с IDispatch, который у объекта ОДИН.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Как Получить интерфейс
От: Аноним  
Дата: 13.11.10 14:58
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, Аноним, Вы писали:


А>>и дальше спокойно вызывается метод Method1()

А>>сейчас мне надо вызвать метод Method2()... но у меня никак не получается взять интерфейс IMyInterface2, подскажите пожалуйста как это надо сделать

Vi2>Никак. VB не работает с dispinterface, он работает с IDispatch, который у объекта ОДИН.

как это не работает, если MyInterface1 я могу спокойно получить?
Re[3]: Как Получить интерфейс
От: Vi2 Удмуртия http://www.adem.ru
Дата: 13.11.10 15:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>как это не работает, если MyInterface1 я могу спокойно получить?


VB просит интерфейс IDispatch и работает с ним. Значит, возвращается dispinterface IMyInterface, ведь он тоже IDispatch!

Попробуй ввести переменную MyInterfase2 As MyLib.IMyInterface2 и присвоить ей Set MyInterfase2 = MyInterfase. Авось сработает.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: Как Получить интерфейс
От: Аноним  
Дата: 13.11.10 15:14
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, Аноним, Вы писали:


А>>как это не работает, если MyInterface1 я могу спокойно получить?


Vi2>VB просит интерфейс IDispatch и работает с ним. Значит, возвращается dispinterface IMyInterface, ведь он тоже IDispatch!


Vi2>Попробуй ввести переменную MyInterfase2 As MyLib.IMyInterface2 и присвоить ей Set MyInterfase2 = MyInterfase. Авось сработает.




Спасиб огромное
Re[2]: Как Получить интерфейс
От: baranovda Российская Империя  
Дата: 13.11.10 19:49
Оценка:
Здравствуйте, Vi2, Вы писали:


Vi2>Никак. VB не работает с dispinterface, он работает с IDispatch, который у объекта ОДИН.


Не. ЕМНИП VB работает как с ранним, так и с поздним связыванием и через Vtable нормально работает с интерфейсами, не унаследованными от IDispatch, если они опубликованы в IDL.

Vi2>Попробуй ввести переменную MyInterfase2 As MyLib.IMyInterface2 и присвоить ей Set MyInterfase2 = MyInterfase. Авось сработает.

Это и есть раннее связывание.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.