Обработка или передача ошибок с сборки .NET на COM-клиент/потребитель

62
3

Я программирую сборку COM Interop.NET(COM Callable Wrapper), и я пытаюсь понять, как правильно передать ошибки, возникающие в сборке .NET, для COM-клиента/потребителя. Я не уверен, что это сильно меняет мой вопрос, но эта конкретная сборка .NET использует существующую библиотеку FTP с открытым исходным кодом и предоставляет подмножество ее возможностей COM. По большей части это простая, "тупая" оболочка.


Я предполагаю, что лучший способ запрограммировать обработку ошибок - это публичное событие OnError внутри сборки .NET, которое клиент/потребитель COM может использовать для подписки на события ошибок. Тогда будет только программирование в COM, чтобы решить, использовать или не использовать это событие и что с ним делать. Это может быть несколько опасно, потому что программист COM может опустить обработчик события ошибки и не знать об ошибках, возникающих в сборке .NET. Поскольку эта сборка .NET должна быть довольно общей, я уверен, что я не хочу, чтобы сборка .NET создавала окна сообщений или обрабатывала ошибки каким-либо другим способом, в которых у потребителя COM мало или вообще нет.


Есть ли лучший способ справиться с этим или стандартным способом?

спросил(а) 2021-01-25T18:48:33+03:00 4 месяца, 3 недели назад
1
Решение
64

Сделайте это стандартным способом .NET, создайте исключение. Обертка CCW ловит ее и переводит ее в код HRESULT, возвращаемый любым COM-методом. Он также реализует IErrorInfo, так что COM-клиент может получить хорошее описание ошибки, не забудьте передать его в конструкторе исключения, если это не является очевидным исключением. Они редко бывают к тому времени, когда они переведены кстати.

Попробуйте использовать стандартные типы исключений .NET как можно больше. У всех у них есть собственное значение свойства HResult, уже настроенное, сопоставление с кодом ошибки COM как можно лучше. Если вам нужен пользовательский HRESULT, используйте конструктор COMException (string, int).

ответил(а) 2021-01-25T18:48:33+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема