Представление C# COM - соединяет интерфейсом с наследованием

Монако 10 ПБ для меня.

12
задан jonathanpeppers 7 December 2009 в 22:10
поделиться

2 ответа

Это не проблема .NET, это следствие того, как работает COM. Он не поддерживает наследование. Вы должны исправить это на стороне клиента, ему нужно вызвать QueryInterface () с IID для IBaseClass, чтобы получить указатель интерфейса на интерфейс IBaseClass, чтобы он мог вызвать GetA (). .NET interop автоматически предоставляет реализацию QI, которая делает эту работу. Однако в этом случае это не очень удобно для пользователя, разработайте свой код на стороне C # так, чтобы клиенту было проще использовать ваш класс, а не наоборот. Вы' d обычно требуется однострочный метод переопределения, который делегирует реализации базового класса C #.

Обратите внимание, что существует проблема с сигнатурами ваших методов и использованием атрибута [PreserveSig]. Их нельзя вызвать через IDispatch, и их нельзя маршалировать автоматически. Для этого требуется метод с HRESULT в качестве типа возвращаемого значения. Это происходит автоматически при удалении атрибута.

12
ответ дан 2 December 2019 в 19:31
поделиться

Похоже, это очень похоже на этот вопрос: Наследование интерфейса в классах ComVisible в C #

Как вы отметили в своей редакции, это ограничение на переход от .net к COM, поскольку интерфейс COM не включает никаких унаследованных интерфейсов.

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

6
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: