传递从COM对象返回的结构时崩溃

时间:2018-09-17 12:41:53

标签: c# com

我正在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方面没有很多经验。)

0 个答案:

没有答案