Я определяю свои интерфейсы в файле A.idl, который я компилирую в A.tlb
В проекте ATL VS2005 "B" я использую importlib (A.tlb) в B.idl и #import«A.tlb» в stdafx.h и реализовать интерфейс IA из A.tlb в классе ATL COM.В проекте выводятся файлы B.dll и B.tlb
. Я добавляю B.tlb к ссылкам приложения C #, а в коде я создаю экземпляр COM-объекта.
Создание экземпляра работает без проблем, если я использую либо
Type.GetTypeFromCLSID(); Activator.CreateInstance(...);
или
[DllImport("ole32.dll", ...)] CoCreateInstance(...)
Оба работают нормально, объект создает и Я могу привести его кИнтерфейс IA определен в A.tlb (фактически RCW, сгенерированный из tlb) и вызывает его методы.По-прежнему никаких проблем.
Затем я использую OLEView, чтобы активировать COM-объект, используя суррогат DllHost.exe по умолчанию.
Создание экземпляра COM-объекта в суррогате (параметр CLSCTX_LOCAL_SERVER в CoCreateInstance) все еще без проблем, но , когда я пытаюсь привести объект к интерфейсу IA, определенному в A.tlb, я получаю E_NOINTERFACE и сообщение о том, что QueryInterface не выполнен, потому что "такой интерфейс не поддерживается".
Пожалуйста, помогите.Что может быть не так?Если вам понадобится дополнительная информация, я постараюсь предоставить как можно больше.