I've never worked with variants in C++. But I'm maintaining code from old C++ projects. Part of it is to translate it or part of it into C#.
I found methods that use variants. I want to "kill" any variant use in a new project version. Can someone help me out on how? Based on this example maybe? Also I'm not a C++ expert. I would like to know what this method is doing (Obviously converting variant to byte array. But how exactly? Where is the data etc.?)
(Example) Method:
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;
}
Larger context:
The application reads/writes via Falcon library to/from EIB/KNX bus. Seems the data passed to/from the bus is of VARIANT data type.