C++代码:
extern "C" __declspec(dllexport)
int ExceptionTest()
{
int* pointer = NULL;*pointer = 100; return 100;
}
c#代码:
class C_Sharp_Call_C__
{
[DllImport("testDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void ExceptionTest();
}
c#调用代码:
1)使用vs的debug模式调试,如下:
2)直接运行debug生成的exe
软件闪退,说明trycatch捕获不到这个异常
3)appconfig文件中增加
直接运行exe,出现弹窗,异常被捕获
4)program增加全局异常捕获,同时取消代码的try catch
在生成的日志中可以得到详细的抛出异常的行数
2022-12-14 14:39:01 217 System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
在 WindowsFormsApp5.C_Sharp_Call_C__.ExceptionTest()
在 WindowsFormsApp5.Form1…ctor() 位置 C:\Users\Administrator\Desktop\临时\WindowsFormsApp5\WindowsFormsApp5\Form1.cs:行号 39
在 WindowsFormsApp5.Program.Main() 位置 C:\Users\Administrator\Desktop\临时\WindowsFormsApp5\WindowsFormsApp5\Program.cs:行号 27-----