c# - 如何将 C++ 中的 bool 数组编码(marshal)到 C# 中的 bool 数组

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

有人可以帮忙吗?

最佳答案

我花了一段时间才弄清楚,但我明白了:将 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/

相关文章:

.net - 消息队列事务超时

c# - 使用 WinSCP .NET 程序集时,...\WinSCP.exe 的版本与该程序集的版本不匹配

c++ - 尝试使用 IViewObject::Draw() 将 Web 浏览器控件渲染到 HDC 中在 IE8 中失败,但在 IE11 中成功

c# - C#中著名的双重检查锁定技术

c# - arsoft.tools.net(DNS Server) 将流量从一个 URL 重定向到另一个(DNS 转发)

java - 性能 : Checked and unchecked exceptions in JAVA

c# - 访问 View 中的viewdata对象

excel - Powershell - 添加捕获以在没有 Excel 进程的情况下进行拾取

c++ - Microsoft Word 连接点接收器示例/MFC 出现问题

c# - Listbox 手动 DrawItem 大字体