Проблема следующая: Имеется COM приложение (назовем его ArcMap) которое предоставляет интерфейс IFeatureCursor,
Написан на .NET COM-класс реализующий этот интерфейс, и зарегистрирован
чтобы ArcMap видел его и мог создавать когда ему это нужно.
У интерфейса IFeatureCursor есть метод NextFeature, типа енумератора, в конце работы которого нужно вернуть
HRESULT равным S_FALSE, в .NET это обеспечивается вызовом exception типа :
Throw New COMException("", S_FALSE)
Public Function NextFeature() As EsriGdb.IFeature Implements EsriGdb.IFeatureCursor.NextFeature
'реализация
'последний вызов когда нечего больше возвращать, чтобы стороннее приложение поняло окончание вызова,
'если вернуть Nothing оно валится
Throw New COMException("", S_FALSE)
End Function
После этого создается второе приложение на .NET которое создает экземпляр приложения ArcMap,
и требует у одного из его объектов интерфейс IFeatureCursor, когда IFeatureCursor ссылается на класс написанный на
.NET и вызывает у него последний раз метод NextFeature получаем COMException
Вопрос как подавить этот Exception, чтобы .NET работал с моим классом так же как и с обычным COM-классом, ведь
.NET подавляет исключения, выбрасываемые методами COM-объектов.
Получается цепочка типа Managed -> Unmanaged -> Managed
Подскажите как от этого избавится и возможно ли? Как .NET заставить понять что нужно погасить исключение?
(аттрибут PreserveSig у метода NextFeature никак не повлиял, пробовал генерировать исключение так
System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(S_FALSE)
тоже не помогло)