如何将带有VARIANT的C++方法转换为不带VARIANT的C#
How to translate a C++ method with VARIANT to C# without VARIANT?
我从未使用过C++中的变体。但我正在维护来自旧C++项目的代码。其中一部分是将它或它的一部分翻译成C#。
我发现了使用变体的方法。我想"杀死"在新项目版本中使用的任何变体。有人能帮我怎么做吗?也许基于这个例子?此外,我不是C++专家。我想知道这个方法在做什么(显然是将变量转换为字节数组。但具体如何?数据在哪里等?)
(示例)方法:
protected bool ConvertVariantToByteArray(VARIANT vtData, int lCount, BYTE[] pArray)
{
if (vtData.vt != (VARENUM.VT_ARRAY | VARENUM.VT_UI1))
return false;
BYTE[] pSafeArrayData;
if (FAILED(SafeArrayAccessData(vtData.parray, (void**) &pSafeArrayData)))
{
return false;
}
long lLbound;
if (FAILED(SafeArrayGetLBound(vtData.parray, 1, &lLbound)))
{
SafeArrayUnaccessData(vtData.parray);
return false;
}
long lUbound;
if (FAILED(SafeArrayGetUBound(vtData.parray, 1, &lUbound)))
{
SafeArrayUnaccessData(vtData.parray);
return false;
}
if (lCount < lUbound - lLbound + 1)
{
lCount = lUbound - lLbound + 1;
SafeArrayUnaccessData(vtData.parray);
return false;
}
for (long i = lLbound; i < lUbound + 1; ++i)
{
*pArray++ = *pSafeArrayData++;
}
SafeArrayUnaccessData(vtData.parray);
lCount = lUbound - lLbound + 1;
return true;
}
更大的上下文:
应用程序通过Falcon库向EIB/KNX总线进行读写。似乎传递到总线/从总线传递的数据属于VARIANT数据类型。
VARIANT
是COM的东西,而不是C++的东西。如果你正在远离变体,你可能不需要逐字逐句地翻译这个方法。
VARIANT
可以存储(alomst)任何东西,包括其他VARIANTS
。您显示的代码将VARIANT
转换为字节数组。
数组有一个下限和上限(本例中为lbound
和ubound
)-它们不需要从0开始运行。for
循环正在将数据复制到数组中。
您可以从C#调用COM,因此可能不需要翻译代码。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 将 std::variant<A, B> 转换为 std::variant<A, B, C>
- 将 uint16 转换为 WMI Variant for CreateSnapshot 方法
- 将 std::variant 转换为另一个具有类型子集的 std::variant
- 将 std::variant 转换为另一个具有超类型集的 std::variant
- 将变体、矢量<variant>和矢量<矢量<variant>>转换为我选择的等效类型
- 错误 C2664:'VariantCopy':无法将参数 2 从 'const VARIANT *' 转换为 'VARIANTARG *'
- 如何将带有VARIANT的C++方法转换为不带VARIANT的C#
- 如何在 c++ 中将 const FB::variant& 转换为用户定义的类?
- 将 boost::any 转换为 boost::variant 的通用函数
- 无法将ByRef VARIANT数组转换为SAFEARRAY
- 如何在C++中将结构转换为VARIANT
- 将VARIANT转换为字节,反之亦然
- 如何将字符串数组转换为 SAFEARRAY 或 VARIANT 或 COLEVariant
- 将代码从 vb6 转换为 c#-System.Variant.Marshal Helper 将对象转换为变体'