我在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),但没有成功。
有人可以帮忙吗?
答案 0 :(得分:2)
我花了一段时间来搞清楚但我得到了它:将VT_BOOL作为第二个模板参数传递给CComSafeArray:
CComSafeArray<VARIANT_BOOL, VT_BOOL> values(3);
如果没有该模板参数,将使用VARTYPE VT_I2(2字节整数,因为VARIANT_BOOL是 short 的别名)创建SAFEARRAY,这不是类型<的C#属性strong> bool [] 期待。