我正在Visual Studio 2015中维护一些C#代码。此代码使用COM对象(用C ++编写),该对象带有Get方法,该方法返回其中带有一些IntPtr
字段的结构。这些是指向内存保存的指针,例如double
个值。像这样的C#代码:
unsafe
{
ComStruct st = comObject.GetStruct();
double* pData = (double*)st.DoubleData; // From IntPtr to double*
int cnt = st.Count;
// Do work here
}
现在,我可以遍历pData
中的所有元素,并对其进行所需的操作。没问题。但是,如果我对返回的struct执行类似的操作:
DoSomething(ref st);
其中DoSomething
定义为:
unsafe void DoSomething(ref ComStruct st)
{
// ...
}
它在这一点上也可以正常执行,但是稍后应用程序挂起几秒钟(约3到5),然后突然退出。没有异常被捕获,但是根据Windows事件查看器的说法,它是Exception code: 0xc0000374
,根据某些消息来源,它会转化为堆损坏。
显然,无论方法为空还是对结构有效,方法调用都可以起到所有作用。 ref
只是一个测试,但没有任何区别。
那么我在这里想念什么?我缺少某种发布或免费操作吗?
(不,我在COM方面没有很多经验。)