BedvitCOM.VariantSerialization() 

Часть библиотеки BedvitCOM
 

Cериализация и десериализация типа данных Variant, используемый в COM, VB, VBA, C++, Python и других поддерживающих СОМ языков
Поддерживаются базовые типы и массивы. Объекты не сериализуются.
В некоторой степени - аналог CComVariant::ReadFromStream и CComVariant::WriteToStream

Функции:
VARIANT byteArrayOutRetval VariantSerialization(VARIANT variantIn)

VARIANT variantOut= VariantDeserialization(VARIANT byteArrayOutRetval)

Параметры функции:
1. 
variantIn/variantOut- входящий/получаемый VARIANT - значение или массив значений
2. byteArrayOutRetval - массив байтов

 

 

 

Особенности:
1. Cериализация в байтовый массив
2. Размер массива не может превышать 2^32 элементов (около 4Гбайт). Это ограничение самого  COM - массива. В С++ (в другом контейнере) сохранял файлы боле 4,5 Гб.
3. Реализован похожий механизм (shared string table), как и в Excel, для оптимизации размера одинаковых строк.

 

 

 

Пример использования


[VBA]

Sub TestVariantSerialization()     

    'Dim bVBA As New BedvitCOM.VBA 'раннее связывание     

    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание     

    Dim t, arr, byteArr          

    Range("A:B").value2 = "Tst Srl ёя"          

    t = Timer         

    byteArr = bVBA.VariantSerialization(Range("A:B").value2)         

    arr = bVBA.VariantDeserialization(byteArr)     

    Debug.Print "VariantSerialization+VariantDeserialization " & Timer - t & " s."     

    Range("D:E").value2 = arr     

End Sub

[/VBA]

Яндекс.Метрика