我在 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),但没有成功。
有人可以帮忙吗?
最佳答案
我花了一段时间才弄清楚,但我明白了:将 VT_BOOL 作为第二个模板参数传递给 CComSafeArray:
CComSafeArray<VARIANT_BOOL, VT_BOOL> values(3);
如果没有该模板参数,将使用 VARTYPE VT_I2(一个 2 字节整数,因为 VARIANT_BOOL 是 short 的别名)创建 SAFEARRAY,这不是类型 < 的 C# 属性。 strong>bool[] 期望。
关于c# - 如何将 C++ 中的 bool 数组编码(marshal)到 C# 中的 bool 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703514/