如何将C ++中的bool数组编组为C#中的bool数组

时间:2013-02-05 08:57:37

标签: c# .net com com-interop

我在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_SAFEARRAYTYPEMISMATCH(0x80131533)。我尝试使用BYTE和VARIANT(使用BOOL),但没有成功。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

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

CComSafeArray<VARIANT_BOOL, VT_BOOL> values(3);

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

相关问题