Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Не разобрался... 13.10.05 07:40 Число просмотров: 1208
Автор: void <Grebnev Valery> Статус: Elderman
|
Не разобрался...
(типа сам с собой :))))
Наверное, я всёже не то, что-то делаю, или не понимаю, или это действительно баг у MS
Оба типа COM ( 1) проект ATL attributed; 2) проект ATL с объектами без атрибутов ) прекрасно работают с C++ клиентами, т.е. в обоих случаях оба интерфейса прекрасно разрешаются, так что вызываются методы в коде типа:
Interface1* pInterface1 = NULL;
Interface2* pInterface2 = NULL;
::CoCreateInstance( CLSID_Object, NULL, CLSCTX_INPROC, IID_Interface1,(void **) &pInterface1);
pInterface1->InterfaceMessage();
pInterface1->QueryInterface( IID_Interface2,(void **) &pInterface2);
pInterface2->InterfaceMessage();
Но вот в клиенте C# как оказывается запросить оба интерфейса можно только для COM, который сделан с ATL attributed классами.
Т.е. можно повторить С++ вызовы в C# для обоих интерфейсов в коде типа
CATLSomeObjectClass coATL_AttributeCls = new CATLSomeObjectClass();
IATLSomeObject InterfaceAttributed1 = ( IATLSomeObject ) coATL_AttributeCls;
IATLSomeObject2 InterfaceAttributed2 = ( IATLSomeObject2 ) coATL_AttributeCls;
InterfaceAttributed1.Message();
InterfaceAttributed2.Message();
Если же объекты сделаны без атрибутов, то ничего подобного не удаётся сделать в клиенте C# (в отличии от C++). В этом случае второго интерфейса не видно напрочь. Такое ощущение, что всё же в этом моём проекте без аттрибутов где-то косяки... Хоть и работает с C++ клиентами на ура.
Если кто сталкивался подскажите, плз.
|
|
|