Я использую внешний собственный COM-компонент в своем приложении на C # .Net.
Этот COM-dll не имеет библиотеки типов, поэтому мне пришлось самому писать код взаимодействия и иметь include / idlфайлы, которые я сделал, как это делает TlbImp.Но хуже всего то, что создание объекта завершилось неудачно с:
Создание экземпляра COM-компонента с CLSID {40700425-0080-11D2-851F-00C04FC21759} из IClassFactory не удалось из-за следующей ошибки: 80040111
Класс создается точно, если я использую собственный CoCreateInstance и указываю class_id и один из реализованных идентификаторов интерфейса.
Как оказалось, проблема заключается в IClassFactory этого COM-объекта:: CreateInstance не поддерживает IID_IUnknown, переданный как параметр riid, и поэтому возвращает CLASS_E_CLASSNOTAVAILABLE (я идентифицировал его с дизассемблером и отладчиком).Компонентом является MS SQL VDI.
Есть ли способ заставить .Net RCW передавать другой идентификатор интерфейса в метод CreateInstance, а не IID_IUnknown?Искал в сети много, но не нашел решения для этого.
В качестве обходного пути я сейчас использую C ++ / CLI для создания объекта с запросом соответствующего интерфейса вместо него, если IID_IUnknown.для этого сейчас, но хотелось бы иметь код на C #, потому что C ++ / CLI требует от меня создания разных DLL для каждой платформы.
Спасибо