我从未使用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数据类型。
答案 0 :(得分:1)
VARIANT
是一个COM事物而不是C ++事物。如果您要远离变体,则可能不需要逐字翻译此方法。
VARIANT
可以存储(alomst)任何内容,包括其他VARIANTS
。您显示的代码将VARIANT
转换为字节数组。
该数组在此示例中具有下限和上限(lbound
和ubound
) - 它们不需要从0开始运行。 for
循环正在将数据复制到数组中。
您可以从C#调用COM,因此可能不需要翻译代码。