如何将C++中的布尔数组封送为C#中的布尔阵列

本文关键字:布尔 阵列 数组 C++ | 更新日期: 2023-09-27 17:57:47

我在C#类中有以下COM可见属性:

[ComVisible]
bool[] Values;

我在C++中有一个类的实例,并使用以下代码来设置这个属性(仅伪代码)

CComSafeArray<VARIANT_BOOL> values(3);
values[0] = VARIANT_FALSE;
values[1] = VARIANT_FALSE;
HRESULT hr = instance->put_Values(values.Detach());

上述代码的最后一行返回COR_E_SAFEArraYTYPEMIMACH(0x80131533)。我尝试了BYTE和VARIANT(BOOL),但没有成功。

有人能帮忙吗?

如何将C++中的布尔数组封送为C#中的布尔阵列

我花了一段时间才弄清楚,但我得到了:将VT_BOOL作为第二个模板参数传递给CComSafeArray:

CComSafeArray<VARIANT_BOOL, VT_BOOL> values(3);

如果没有该模板参数,SAFEARRAY将使用VARTYPE VT_I2(一个2字节的整数,因为VARIANT_BOOL是short的别名)创建,这不是BOOL[]类型的C#属性所期望的。