Неуправляемая dll бросает исключения. Как правильно ловить?
Есть dll, написанная на чистом c++. Необходимо вызывать ее экспортные методы из c#, но есть загвозка. dll бросает исключения своих типов, там есть класс что-то вроде MyException с разными свойствами, в данном случае интересует LPCSTR Msg и long code.
Бросается просто вот так: throw MyException("блалала", 100);
Вопрос - как правильно ловить такие исключения в управляемом коде. Какого типа объект будет получен в блоке catch и как описать сам блок catch? Что станет с неуправляемой строкой сообщения?
Пробовали описать свою исключительную ситуацию?
Цитата: cronya
Пробовали описать свою исключительную ситуацию?
Это как? Исключение в данном случае - это объект, который содержит в себе некоторые свойства. Если его не поймать приложение рухнет. А если поймать, то что именно я должен написать в catch на стороне управляемого кода в C#?
Код:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
try
{
DoSome();
}
catch (NotNullExec e)
{
MessageBox.Show(e.Message);
}
}
private void DoSome()
{
int x = 10;
int y = 0;
if (y == 0)
{
throw new NotNullExec();
}
}
private class NotNullExec : System.Exception
{
public NotNullExec() { }
public override string Message
{
get
{
return "На ноль делить нельзя";
}
}
}
}
{
public Form1()
{
InitializeComponent();
try
{
DoSome();
}
catch (NotNullExec e)
{
MessageBox.Show(e.Message);
}
}
private void DoSome()
{
int x = 10;
int y = 0;
if (y == 0)
{
throw new NotNullExec();
}
}
private class NotNullExec : System.Exception
{
public NotNullExec() { }
public override string Message
{
get
{
return "На ноль делить нельзя";
}
}
}
}
У вас проблема вообще должна возникать по поводу, как обработать типы, используемые в с++. С этим не подскажу, так как стараюсь не смешивать с++ и с#
Вот спасибо, уважаемый. Вы вопрос читали, вообще? Вот зачем было отвечать бесполезной информацией, я обрадовался, смотреть полез....
Про маршалинг почитайте.
Начиная с CLR 2.0 неуправляемые исключения оборачиваются в RuntimeWrappedException. В его свойстве WrappedException - объект, пришедший из неуправляемого кода.