Проект C# Ссылка на проект CLR, а проект CLR включает в себя статическую либерацию.
Каждый проект составлен для отладки и x64. Код:
Код: Выделить всё
#include "pch.h"
#include
namespace ExceptionTestAppCPP
{
class CPPClass
{
public:
void Test()
{
throw new std::exception("Test exception");
}
};
}
Код: Выделить всё
#pragma once
#include
#include
namespace ExceptionTestAppCLR
{
public ref class CLRClass
{
public:
void Test()
{
try
{
ExceptionTestAppCPP::CPPClass cppClass;
cppClass.Test();
}
catch (std::exception* ex)
{
throw;
}
catch (...)
{
throw;
}
}
};
}
namespace ExceptionTestAppCSharp
{
internal class Program
{
static void Main(string[] args)
{
try
{
var clr = new ExceptionTestAppCLR.CLRClass();
clr.Test();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
< /code>
Запуск кода приведет к тому, что исключение std :: исключено в тест Static Libs cppclass () и пойманной функцией Clr Clrclass test () в блоке его улова (Std :: Exception* ex). быть пойманным как System :: Exception By The Catch (...) Block.
System :: Exception содержит сообщение «Внешний компонент, который добавил исключение». удален и до сих пор вызывает проблему. обработка.
Это действительно решает проблему, но я не могу ожидать, что все клиенты /пользователи будут включить это в своем проекте или даже знать об этой проблеме, просто для того, чтобы использовать наш код. Мы используем, которых мы не владеем или не поддерживаем больше.>
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-expecte
Мобильная версия