Добавление COM-ссылки с Visual Studio переименовывает интерфейсы в Interop Assembly - PullRequest
2 голосов
/ 22 августа 2009

Я добавляю C ++ COM dll в качестве ссылки на проект C # (Visual Studio 2008). VS добавляет ссылку, однако сгенерированная библиотека взаимодействия не отражает именования в исходном определении typelib (.idl). Вот как выглядит определение моей библиотеки:

[
   uuid(...),
   helpstring("MyLib")
]
library MyLib
{    
    [
        uuid(...),
        helpstring("MyCom CoClass")
    ]
    coclass MyComCoClass
    {
        [default] interface IMyInterface;
        interface IMyInheritedInterface;
        interface IMyBaseInterface;
    };
}

Итак, IMyInterface наследует от IMyInheritedInterface, который, в свою очередь, наследует от IMyBaseInterface. Я хочу, чтобы все эти интерфейсы были доступны при добавлении .dll этого COM. В сборке взаимодействия VS генерирует для typelib выше, IMyInterface становится MyInterface. Почему и есть ли способ обойти это?

Спасибо

1 Ответ

2 голосов
/ 24 августа 2009

Импортер typelib делает это, когда интерфейс является интерфейсом по умолчанию для кокласса и используется только этим коклассом.

Итак, один из обходных путей - добавить еще один фиктивный кокласс в вашу библиотеку типов и сделать IMyInterface интерфейсом по умолчанию для этого.

...