我有一个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);
答案 0 :(得分:2)
在调试模式下启动一个应用程序会禁用低碎片堆 - 你仍然在破坏内存,你只是很幸运并且捣毁了一些填充内存。如果要查看正常行为,请使用Ctrl-F5运行应用程序,然后使用另一个VS实例附加到进程