0
我从来没有在C++中使用变体。但我正在维护旧的C++项目的代码。其中的一部分是将它或它的一部分翻译成C#。如何将没有VARIANT的C++方法与VARIANT转换为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数据类型。
变体与COM对象一起使用。如果您使用的是COM,那么您可能需要使用变体。问题的大背景是什么? – 2015-02-23 11:33:07
你有看这里吗? - > http://stackoverflow.com/questions/15806733/variant-datatype-of-c-into-c-sharp – 2015-02-23 11:34:20
它主要破坏内存,调用者在猜测所需的pArray大小时没有很好的可能性。不要使用它。在C#中将变体转换为byte []很简单,只需将其转换即可。 – 2015-02-23 11:36:32