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

Использование простое, как обычная функция (предварительно подключив или открыв надстройку по ссылке чуть ниже и COM в автоматическом/ручном режиме):
Код
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


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



Надстройка BedvitXLL64v4.11beta
Изменено: bedvit - 19.12.2023 13:14:22
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Читают тему
Наверх