gpt4 book ai didi

.net - 将接口(interface)数组从 .Net 编码到 C++ 时抛出 ExecutionEngineException

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:47 26 4
gpt4 key购买 nike

我有以下用 C# 实现的 COM 接口(interface):

[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 方法时,会抛出以下异常:

An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.

这是调用这个接口(interface)的C++代码。

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

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

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

这是怎么回事?

最佳答案

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

关于.net - 将接口(interface)数组从 .Net 编码到 C++ 时抛出 ExecutionEngineException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com