将接口数组从.Net编组到C ++时抛出ExecutionEngineException

时间:2011-04-13 03:08:44

标签: .net c++ com interop

我在C#中实现了以下COM接口:

[InterfaceType(1)]
[TypeLibType(256)]
public interface IEnumMyType
{
    void Clone(out IEnumMyType ppEnum);
    void RemoteNext(uint celt, IMyType[] rgelt, out uint pCeltFetched);
    void Reset();
    void Skip(uint celt);
}

但是,当从C ++调用RemoteNext方法时,抛出以下异常:

  

未知模块中出现未处理的“System.ExecutionEngineException”类型异常。

这是调用此接口的C ++代码。

CComPtr<IEnumMyType> spEnum;
CComPtr<IMyType> spElem;
ULONG iElemCount = 0;

/* Creation of spEnum skipped */
spEnum->Next(1, &spElem, &iElemCount);

似乎托管的COM接口声明不正确,但它是由Tlbexp.exe生成的。

怎么回事?

1 个答案:

答案 0 :(得分:0)

是否有关于rgelt参数的信息(可能是MarshalAsAttribute)?如果没有一些额外的属性,COM Interop编组将默认编组阵列为SAFEARRAYS。在调用它时,您没有为此参数传递安全数组,这可能是个问题。