Создание COM DLL для вызова из C #, HRESULT обработки ошибок? - PullRequest
2 голосов
/ 29 апреля 2010

Я делаю COM-интерфейс, который будет использовать c #, однако мне интересно, как мне проверить наличие ошибок для обработки исключений на стороне c #. На данный момент я просто возвращаю HRESTULT или bool для большинства методов, а затем выполняю Marshal.ThrowExceptionForHR, но в некоторых из этих методов может произойти несколько ошибок, и возвращение E_FAIL просто не сокращает его.

Что я могу сделать, чтобы вернуть больше информации? Могу ли я сделать HRESULT самостоятельно?

1 Ответ

1 голос
/ 29 апреля 2010

На самом деле я никогда не делал этого, но теоретически вы можете сделать это, поддерживая IErrorInfo . Marshal.GetExceptionForHR() имеет перегрузку, которая принимает указатель IErrorInfo.

Кстати, вам не нужно вручную вызывать Marshal.ThrowExceptionForHR() - если ваш метод возвращает HRESULT и параметр [out] для возвращаемого значения, вы можете объявить его в .NET как возвращающее возвращаемое значение и установить PreserveSig = false , и CLR автоматически выдаст исключение, если HRESULT указывает на ошибку.

...