我在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生成的。
怎么回事?
答案 0 :(得分:0)
是否有关于rgelt参数的信息(可能是MarshalAsAttribute)?如果没有一些额外的属性,COM Interop编组将默认编组阵列为SAFEARRAYS。在调用它时,您没有为此参数传递安全数组,这可能是个问题。