Это не проблема .NET, это следствие того, как работает COM. Он не поддерживает наследование. Вы должны исправить это на стороне клиента, ему нужно вызвать QueryInterface () с IID для IBaseClass, чтобы получить указатель интерфейса на интерфейс IBaseClass, чтобы он мог вызвать GetA (). .NET interop автоматически предоставляет реализацию QI, которая делает эту работу. Однако в этом случае это не очень удобно для пользователя, разработайте свой код на стороне C # так, чтобы клиенту было проще использовать ваш класс, а не наоборот. Вы' d обычно требуется однострочный метод переопределения, который делегирует реализации базового класса C #.
Обратите внимание, что существует проблема с сигнатурами ваших методов и использованием атрибута [PreserveSig]. Их нельзя вызвать через IDispatch, и их нельзя маршалировать автоматически. Для этого требуется метод с HRESULT в качестве типа возвращаемого значения. Это происходит автоматически при удалении атрибута.
Похоже, это очень похоже на этот вопрос: Наследование интерфейса в классах ComVisible в C #
Как вы отметили в своей редакции, это ограничение на переход от .net к COM, поскольку интерфейс COM не включает никаких унаследованных интерфейсов.
На некоторых языках вы могли бы решить эту проблему, добавив блок код во всех соответствующих интерфейсах,