Проблемы .NET COM и HRESULT
От: ShtormX  
Дата: 18.03.06 15:08
Оценка:
Проблема следующая: Имеется 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)
тоже не помогло)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.