2

我在 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),但没有成功。

有人可以帮忙吗?

4

1 回答 1

2

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

CComSafeArray<VARIANT_BOOL, VT_BOOL> values(3);

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

于 2013-02-05T12:40:51.973 回答