当编组接口数组从.net到c++时抛出ExecutionEngineException

ExecutionEngineException thrown when marshalling interface array from .Net to C++

本文关键字:c++ ExecutionEngineException net 接口 数组      更新时间:2023-10-16

我在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"的未处理异常。

执行引擎异常

这是调用这个接口的c++代码。

CComPtr<IEnumMyType> spEnum;
CComPtr<IMyType> spElem;
ULONG iElemCount = 0;
/* Creation of spEnum skipped */
spEnum->Next(1, &spElem, &iElemCount);

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

怎么回事?

关于rgelt参数(可能是MarshalAsAttribute)是否有更多信息?如果没有一些额外的属性,COM互操作封送将默认封送数组为safearray。在调用该参数时,没有为其传递一个安全数组,这可能是一个问题。

相关文章:
  • 没有找到相关文章