Получение сообщения об ошибке из HRESULT в C ++ после вызова C # COM-объекта

У меня есть COM-объект, написанный на C #. При некоторых обстоятельствах COM-объект может выдать исключение с описательным сообщением, если он обнаружит ошибку (например, throw new Exception("error message")).

Этот COM-объект вызывается из кода VB6 и из кода C ++.

Из кода VB6 я могу получить сообщение об ошибке, используя Err.Message,

В C ++ я получаю HRESULT 0x80131500, как указано в документации System.Exception.

Как только у меня есть этот HRESULT в C ++, как я могу получить сообщение об ошибке исключения (Exception.Message) как сообщение, возвращаемое Err.Message в VB6?

Я искал в Интернете и нашел несколько примеров, используя FormatMessage а также _com_error, но ни один из них не возвращает сообщение, которое я хочу.

1

Решение

Обновлено.

Пробовать QueryInterface провальный объект для ISupportErrorInfo интерфейс, затем вызовите InterfaceSupportsErrorInfo метод с REFIID интерфейса, бросающего исключение. Если он вернется S_OKзатем просто вызывает GetErrorInfo функция, чтобы получить IErrorInfo интерфейс. Затем используйте GetDescription метод.

1

Другие решения

Других решений пока нет …