Получение сообщения об ошибке из 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
метод.