Сообщение об исключении C++/WinRT имеет префикс «Неизвестная ошибка» в C#.C#

Место общения программистов C#
Anonymous
Сообщение об исключении C++/WinRT имеет префикс «Неизвестная ошибка» в C#.

Сообщение Anonymous »

Я использую WinRT для взаимодействия между C++/WinRT и C#.
Я создаю исключение в C++ следующим образом:

Код: Выделить всё

catch (CRef _exc)
{
throw winrt::hresult_error(
E_FAIL,
winrt::to_hstring(_exc.what()));
}
На стороне C# я просто делаю:

Код: Выделить всё

try
{
await obj.SomeMethodAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Ожидается

Только мое исходное сообщение:

Код: Выделить всё

Failed to Function.
Актуально

Сообщение будет выглядеть следующим образом:

Код: Выделить всё

Unspecified error

Код: Выделить всё

Failed to initialize camera.
Важные факты
  • Я использую winrt::hresult_error
  • Я подтвердил, что строка сообщения правильно передана в исключение
  • Проблема возникает только после пересечения границы WinRT в C#
  • Если я отлаживаю внутри C++, прежде чем выйти из метода, сообщение будет правильным.
  • После перехода на C# появляется текст префикса.
Вопрос
Что заставляет .NET / WinRT добавлять системное сообщение в начало

"Не указано" error»

даже если я передаю специальное сообщение через winrt::hresult_error?
Каков правильный HRESULT или шаблон исключения, чтобы избежать такого поведения и передать на C# только исходное сообщение?

Вернуться в «C#»