COM-совместимость и наследование - PullRequest
2 голосов
/ 11 февраля 2012

Я столкнулся с некоторыми проблемами с компонентом .NET, который я пишу, и предназначенным для доступа к COM.

Класс, который должен быть представлен, наследуется от базового класса, оба из которых имеют свойства ComVisible, имеющие значение true.В базовом классе нет ничего особенного - он содержит 2 свойства, которые я использую для абстрагирования некоторого кода базы данных.

Я могу зарегистрировать сборку и просто набрать lib.Однако, как только я пытаюсь создать экземпляр класса, я получаю следующее исключение из вызываемого:

Ошибка в IDispatch.Invoke (): 0x80020101

Я решил отладить его в CScript.exe и я получаю ту же ошибку.Поэтому я переписал класс без базового класса, и теперь я могу создавать экземпляры без проблем.

Нужно ли выполнять дополнительную работу, чтобы представить класс .NET, который наследуется от другого класса .NET, вто же пространство имен?

1 Ответ

3 голосов
/ 11 февраля 2012

Вы не можете напрямую использовать производные интерфейсы на языке сценариев.Скриптовые движки поддерживают только кокласс, который реализует единственный интерфейс, интерфейс по умолчанию.Другими словами, языки сценариев, такие как vbscript или jscript, не являются объектно-ориентированными языками, которые поддерживают множественное наследование.Обходной путь - добавить метод к интерфейсу по умолчанию, который возвращает ссылку на второй интерфейс.Обычно это делается не просто, и это просто в сценарии.

...