Попытки использовать COM видимого класс .NET с помощью другого приложения .NET и получить исключение:Marshal.ReleaseComObject бросает исключение
Сообщения: Тип объекта должен быть __ComObject или производными от __ComObject.
Имя параметра: о
трассировки стека: на System.Runtime.InteropServices.Marshal.ReleaseComObject (Object о)
Класс выглядит следующим образом:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IViewer : IComInteropDefinedInterface
{
}
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("[some guid]")]
public class MyViewer : UserControl, IViewer
{
//IViewer implementation
}
Я регистрирую компонент с помощью:
regasm [Assembly Path] /tlb /codebase
Клиентское приложение, которое также находится в .NET, успешно запускает данный класс, но когда он вызывает Marshal.ReleaseComObject()
, он получает исключение, описанное выше.
Любая идея для решения этой проблемы?
EDIT: К сожалению, я не могу предоставить код клиентского приложения для экземпляра объекта. Однако я знаю, что клиент использует тот же метод для создания экземпляров реальных COM-объектов.
Вы можете включить код, где ваш являются создание экземпляра объекта и где вы вызываете 'ReleaseComObject' тоже? Какой тип имеет объект, который вы выпускаете? Кажется, что это не COM-объект. И как в сторону: в чем причина того, что вы хотите использовать COM в этом случае? Использование .NET-сборки из .NET работает намного проще без COM (и на самом деле у меня есть подозрение, что вы уже это делаете ;-) –
Можете ли вы опубликовать код клиента, было бы хорошо посмотреть, как создается экземпляр компонента –
К сожалению, я не могу предоставить код клиентского приложения для создания экземпляра моего объекта. Однако я знаю, что клиент использует тот же метод для создания экземпляров реальных COM-объектов. – Aaron