消失的SEHException

时间:2011-10-23 17:40:18

标签: c# pinvoke

我有一个C / C ++ DLL。我有和ASP.NET应用程序使用P / Invoke调用此DLL。有时其中一个调用会抛出SEHException

现在出于测试目的,我先用相同的数据调用该函数。

DllFunctions.MyStructure[] structArray = new DllFunctions.MyStructure[2];
structArray[0].A = 10;
structArray[0].B = 10;
structArray[0].C = 15;
structArray[0].D = 15;
structArray[1].A = 8;
structArray[1].B = 12;
structArray[1].C = 13;
structArray[1].D = 17;
int arraySize = 2;
DllFunctions.MyStructure[] otherArray = new DllFunctions.MyStructure[0];
DllFunction.ProblematicFunction(structArray, arraySize, otherArray, 0);

当我在调试模式下启动应用程序时,有时碰巧会向我发送SEHException,有时它不会。什么会导致这样的随机行为?

编辑:如果从具有相同数据的C ++控制台应用程序调用,则该函数运行正常。

编辑:P / Invoke签名

[DllImport("mylib.dll")]
public extern static MyStructure ProblematicFunction(MyStructure[] structs1, int arrayLen1, MyStructure[] structs2, int arrayLen2);

1 个答案:

答案 0 :(得分:2)

在调试模式下启动一个应用程序会禁用低碎片堆 - 你仍然在破坏内存,你只是很幸运并且捣毁了一些填充内存。如果要查看正常行为,请使用Ctrl-F5运行应用程序,然后使用另一个VS实例附加到进程