当编组接口数组从.net到c++时抛出ExecutionEngineException
ExecutionEngineException thrown when marshalling interface array from .Net to C++
我在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。在调用该参数时,没有为其传递一个安全数组,这可能是一个问题。
相关文章:
- 没有找到相关文章