我有一个来自COM对象使用的IDL文件的以下方法:
HRESULT GetData([out] WCHAR model[40], [out] BOOL isSupported[3]);
我想从C ++ .NET代码中调用此方法,所以我创建了一个接口,以便将创建的COM服务器强制转换为此表单,这是一个来自C#中定义的接口的方法:
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
void GetData(
[Out, MarshalAs(UnmanagedType.LPWStr)] out char[] model,
[Out, MarshalAs(UnmanagedType.LPArray, SizeConst = 3)] out bool[] isSupported
);
接下来我尝试从接口运行C ++ CLI中的方法(COM对象被转换为在C#中声明的接口)
cli::array<char,1>^ temp1 = gcnew cli::array<char,1>(40);
cli::array<bool,1>^ temp2 = gcnew cli::array<bool,1>(3);
COMInterface->GetData(temp1, temp2);
我在并发症中得到错误:
错误139错误C2664:'COMInterface :: GetData':无法转换 参数1从'cli :: array ^'到 'cli :: array ^%'
我每次尝试使用WCHAR [40](使用LPArray,LPWSTR等)的许多解决方案都没有成功(复制错误或将COM对象转换为无效接口时出现异常)
我错过了什么?我该如何编组固定阵列?谢谢你的帮助。