У меня есть неуправляемая dll С++, которая вызывается из приложения С#, я пытаюсь заставить приложение С# уловить все исключения, чтобы в случае сбоя dll из-за неуправляемого исключения, тогда пользователь получит сообщение с недостойным сообщением (приложение С# - это веб-сервис, реализующий собственный HTTP-обработчик).
Проблема заключается в том, что не все типы пойманы. Поэтому, если я создам следующее и выполняю приложение С#, тогда dll выдает ошибку, и все приложение завершается. Любые идеи?
Это создается в VS2005 и использует .Net framework v2
С++ - Test.h
#ifndef INC_TEST_H
#define INC_TEST_H
extern "C" __declspec(dllexport) void ProcessBadCall();
#endif
С++ - Test.cpp
#include <iostream>
#include <vector>
using namespace std;
void ProcessBadCall()
{
vector<int> myValues;
int a = myValues[1];
cout << a << endl;
}
С# - Program.cs
class Program
{
[DllImport("Test.dll", EntryPoint="ProcessBadCall")]
static extern void ProcessBadCall();
static void Main(string[] args)
{
try
{
ProcessBadCall();
}
catch (SEHException ex)
{
Console.WriteLine("SEH Exception: {0}", ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("Exception: {0}", ex.Message);
}
}
}
dll скомпилируется в конфигурации выпуска со следующими флагами компилятора.
/O2/GL/D "WIN32" /D "NDEBUG" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /D "_WINDLL" /FD/EHa/MD/Fo "Release \" /Fd "Release\vc80.pdb" /W 4/WX/nologo /c/Wp 64/Zi/TP/errorReport: prompt