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