BedvitCOM - библиотека для COM/ActiveX поддерживающих приложений/языков на Windows (х32, х64)

COM (англ. Component Object Model «модель компонентного объекта»; произносится как [ком]) — это технологический стандарт от компании Microsoft, предназначенный для создания программного обеспечения на основе взаимодействующих компонентов объекта, каждый из которых может использоваться во многих программах одновременно. В современных версиях Windows COM используется очень широко. На основе COM были реализованы технологии: Microsoft OLE Automation, ActiveX, DCOM, COM+, DirectX, а также XPCOM.

Полное описание функционала в Wiki, разделы: "Библиотека COM.. (COM: ...)"

BedvitCOM
Библиотека COM                        DLL c COM интерфейсом. Реализованы dual-интерфейсы с Automation-совместимыми типами данных.
                                 
Класс BignumArithmeticInteger    Класс целых чисел с арифметикой (BignumArithmeticInteger).
Help                        HTML Справка (без параметров). Открывает html-страницу с описанием свойств и методов класса.
Bignum                      Принимает и возвращает BSTR строку StringBSTR (задает число или возвращает значение).
Sign                        Возвращает знак длинного числа.
Even                        Определяет, является ли Bignum четное или нечетное.
Compare                     Сравнивает два длинных числа.
BignumSet                   Задает число с параметрами аналогичными методу Bignum().
Sum                         Суммирует два длинных числа.
SumL                        Суммирует длинное число с обычным.
Abs                         Возвращает модуль числа.
Negate                      Задает значение с противоположным знаком.
Subtract                    Вычитает из одного длинного числа другое.
SubtractL                   Вычитает из длинного числа обычное.
Multiply                    Умножает одно длинное число на другое. 
MultiplyL                   Умножает длинное число на обычное. 
Divide                      Делит одно длинное число на другое.
DivideL                     Делит длинное число на обычное.
Power                       Возводит в степень длинное число.
Clone                       Копирует одно длинное число в другое.
RootRem                     Извлекает корень длинного числа.
Factorial                   Возвращает факториал для длинного числа.
Fibonacci                   Возвращает в число Фибоначчи для длинного числа.
LucNum                      Возвращает число Лукаса для длинного числа.
FileSet                     Загружает длинное число из файла (*.txt).
FileGet                     Сохраняет длинное число в файл (*.txt).
Clear                       Освобождает память занятую длинным числом.
BignumArraySize             Возвращает количество чисел Bignum в созданном классе/массиве.
                                 
Класс BignumArithmeticFloat      Класс чисел с плавающей точкой (BignumArithmeticFloat).
Help                        HTML Справка (без параметров). Открывает html-страницу с описанием свойств и методов класса.
SizeBits                    Задает и возвращает размер длинного числа.
Bignum                      Принимает и возвращает BSTR строку StringBSTR (задает число или возвращает значение).
Sign                        Возвращает знак длинного числа.
Compare                     Сравнивает два длинных числа.
SizeBitsSet                 Метод. Задает размер длинного числа.
BignumSet                   Задает число с параметрами аналогичными методу Bignum().
Sum                         Суммирует два длинных числа.
SumL                        Суммирует длинное число с обычным.
Abs                         Возвращает модуль числа.
Subtract                    Вычитает из одного длинного числа другое.
SubtractL                   Вычитает из длинного числа обычное.
Multiply                    Умножает одно длинное число на другое. 
MultiplyL                   Умножает длинное число на обычное. 
Divide                      Делит одно длинное число на другое.
DivideL                     Делит длинное число на обычное.
Root                        Извлекает квадратный корень длинного числа.
Negate                      Задает значение с противоположным знаком.
Power                       Возводит в степень длинное число.
Clone                       Копирует одно длинное число в другое.
FileSet                     Загружает длинное число из файла (*.txt).
FileGet                     Сохраняет длинное число в файл (*.txt).
Clear                       Освобождает память занятую длинным числом.
BignumArraySize             Возвращает количество чисел Bignum в созданном классе/массиве.
GetToBignumInt              Преобразовать Bignum из Float в Integer.
                                 
Класс VBA                        Сборник инструментов, не вошедших в другие классы.
ArraySortS                  Быстрая сортировка данных (String) в одномерном/двухмерном массиве.
FilterUnicodeChar           Получить/удалить любые символы Unicode из строки (отфильтровать).
LikeUnicodeChar             Сравнивает строку с маской/шаблоном (или наоборот исключая символы шаблона). Регистрозависимая. (v1.0.5.0 и выше).
Trim                        Удаляет из текста все пробелы, за исключением одиночных пробелов между словами.
InStr                       Ищет первое вхождение подстроки в строку. Регистрозависимая.
Replace                     Заменяет одну подстроку на другую. Параметр Start - не усекает строку, в отличии от стандартной Replace() в VBA. Регистрозависимая.
ArraySortV                  Быстрая сортировка данных (Variant) в одномерном/двухмерном массиве.
Transpose                   Быстрое транспонирование (на месте) двухмерного массива (поддерживаются все типы данных).
QRcodePrint                 Печатает QR-код в ячейке листа Excel.
ConvertFormatImage          Конвертации форматов bmp, jpeg, gif, tiff, png из одного в другой.
GetRowsCountCSVansi         Возвращает кол-во строк в файле CSV.
GetRowCSVansi               Возвращает найденную строку в файле CSV по индексу.
FindRowsInCSVansi           Возвращает найденную строку/строки в файле CSV по искомой подстроке.
SortDeleteDuplicateRowsCSVansi Сортировка и удаление дубликатов строк в csv/txt(ANSI) файлах.
SHAstrUTF8                  Хеширование строки алгоритмами SHA.
MDstrUTF8                   Хеширование строки алгоритмами MD.
AESstrUTF8                  Шифрование данных алгоритмами AES.
Array2Dto1D                 Быстрое преобразования двухмерного массива в одномерный.
Array1Dto2D                 Быстрое преобразование одномерного массива в двухмерный (данные не удаляются) (v1.0.5.0 и выше).
ArrayFilterV                Фильтр одномерного и двухмерного СОМ-массива (VARIANT).
ArrayCharLowerV             Преобразовать все символы строки в нижний регистр (в массиве).
ArrayCharUpperV             Преобразовать все символы строки в ВЕРХНИЙ регистр (в массиве).
ArrayCharToNumV             Преобразовать все данные в тип: Double (числа сохраненные как текст)  (в массиве).
ArrayNumToCharV             Преобразовать все данные в тип: String (в массиве).
Version                     Версия библиотеки BedvitCOM.dll.
FileName                    Полный путь к зарегистрированной библиотеки BedvitCOM.dll
VariantCopy                 Глубокая копия VARIANT.
ArrayDtoD                   Быстрое преобразование одномерного массива в двухмерный (данные не удаляются и не добавляются).
ArrayReDim                  Изменение размерности и количество элементов в размерностях СОМ-массива.
ArraySize                   Размер СОМ – массива. Количество элементов в сумме по всем измерениям.
SplitS                      Возвращает одномерный массив подстрок из указанной строки, разделенной по указанному разделителю (входящая строка BSTR).
SplitV                      Возвращает одномерный массив подстрок из указанной строки, разделенной по указанному разделителю (входящий VARIANT).
ArrayCopyStoV               Копирование СОМ-массива с типом данных BSTR(строка) в СОМ-массив с типом данных VARIANT.
ArrayConvertStoV            Преобразование «на месте» СОМ-массива с типом данных BSTR(строка) в СОМ-массив с типом данных VARIANT.
ArrayConvertVtoS            Преобразование «на месте» СОМ-массива с типом данных VARIANT в СОМ-массив с типом данных BSTR(строка).
Like                        Используется для сравнения двух строк.
RegexMatchECMAScript        Поиск подстроки в строке с помощью регулярных выражений, грамматика ECMAScript.
UnicodeCharCodeGet          Возвращает юникод указанного символа в строке.
UnicodeCharCodeSet          Меняет указанный символ в строке на указанный юникод.
CoCreateGuid                создает GUID — уникальное 128-битное целое число.
VariantSerialization        Cериализация и десериализация типа данных Variant, используемый в COM.
VariantDeserialization      Cериализация и десериализация типа данных Variant, используемый в COM.
VariantAES256Encrypt        Шифрование данных алгоритмами AES (зашифровать).
VariantAES256Decrypt        Шифрование данных алгоритмами AES (расшифровать).
ValueFormatExcelSheet       Преобразования данных в формат выгрузки на лист Excel (для текста проставляется апостроф(') первым символом).
                                 
Класс UnorderedMap               Неупорядоченный ассоциативный контейнер, содержащий пары ключ-значение с уникальными ключами.
Find                        Поиск значения по ключу, возвращает true, если найден. Если value задан - возвращает значение (опционально).
Insert                      Вставляет пару ключ-значения по ключу, возвращает true, если успешно, false - если ключ уже есть (не перезаписывается).
InsertOrAssign              Вставляет или перезаписывает пару ключ-значения по ключу, возвращает true, если создан новый и false если обновлен уже существующий.
Erase                       Удаляет пару ключ-значения по ключу, возвращает true, если успешно.
Clear                       Освобождает память занятую длинным числом.
Size                        Возвращает размер контейнера (количество пар ключ-значение).
RangeSet                    Вставляет пары ключ-значения из массива/диапазона, возвращает количество вставленных пар ключ-значение.
RangeGet                    Возвращает количество выгруженных элементов в массив с указанной нижней границей массива.
SetArray1D                  Вставляет пары ключ-значения из одномерного массива по порядку (ключи, потом значения), возвращает количество вставленных пар ключ-значение.
GetArray1D                  Возвращает количество выгруженных элементов в одномерный массив по порядку (ключи, потом значения), с указанной нижней границей массива.






Вычисления любой точности (в системах счисления с основанием от 2 до 36)



Bignum arithmetic for applications supporting the COM-interface.

The project is based on the source (in C ++) libraries MPIR, Edition 3.0.0.(https://github.com/wbhart/mpir)

License: Freely distributable library

Completely written in C / C ++.

DLL with COM interface. Implemented dual-interfaces with Automation-compatible data types, structures (support early (or static) binding and late (or dynamic) binding). Early is preferable in terms of speed (50% faster).

Two classes are implemented: a class of integers with arithmetic (BignumArithmeticInteger) and a class of numbers with a floating point (BignumArithmeticFloat).

When you create an instance of a class, you create an array of numbers with arithmetic. The Bignum can be accessed by numbers (was the idea to enter the name, but does this justify the convenience of speed loss?)

BignumArithmeticInteger (Bignum) increases in memory automatically as it is calculated, redistributing memory.

BignumArithmeticFloat (Bignum), is set initially, because The decimal fraction can be infinite (the default is the minimum size).

The size of numbers is not limited to anything, except your RAM.

 

Registration COM is implemented both under the admin and under the user (actual in the office part of the clients)

Registration is standard:

Admin: Regsvr32 "FullName.DLL"

User: Regsvr32 /i /n  FullName.DLL"

 

UnRegistration:

Regsvr32 /u " FullName.DLL"

 

More info:

"The size of BignumArithmeticInteger (Bignum) is set automatically and grows in memory as needed. To avoid frequent reallocations in memory - redistributed only upwards. BignumArithmeticFloat (Bignum) uses a user-defined size in bits, to the desired accuracy of the mantis. The size of such a variable does not change. The maximum size of these numbers depends only on the size of your RAM.

Floating point numbers are stored in objects of type BignumArithmeticFloat (Bignum). The mantissa of each float has a user-selectable precision, limited only by available memory. Each variable has its own precision, and that can be increased or decreased at any time. The exponent of each float is a fixed precision, one machine word on most systems. In the current implementation the exponent is a count of limbs, so for example on a 32-bit system this means a range of roughly 2 in 68719476768 to 2 in 68719476736, or on a 64-bit system this will be greater. Each variable keeps a size for the mantissa data actually in use.

This means that if a float is exactly represented in only a few bits then only those bits will be used in a calculation, even if the selected precision is high. All calculations are performed to the precision of the destination variable. Each function is defined to calculate with “infinite precision” followed by a truncation to the destination precision, but of course the work done is only what’s needed to determine a result under that definition. The precision selected for a variable is a minimum value, BignumArithmeticFloat (Bignum) may increase it a little to facilitate efficient calculation. Currently this means rounding up to a whole limb, and then sometimes having a further partial limb, depending on the high limb of the mantissa. But applications shouldn’t be concerned by such details. The mantissa in stored in binary, as might be imagined from the fact precisions are expressed in bits. One consequence of this is that decimal fractions like 0:1 cannot be represented exactly.

The same is true of plain IEEE double floats. This makes both highly unsuitable for calculations involving money or other values that should be exact decimal fractions. (Suitably scaled integers, or perhaps rationals, are better choices.) BignumArithmeticFloat (Bignum) functions and variables have no special notion of infinity or not-a-number, and applications must take care not to overflow the exponent or results will be unpredictable. This might change in a future release. Note that the BignumArithmeticFloat (Bignum) functions are not intended as a smooth extension to IEEE P754 arithmetic. In particular results obtained on one computer often differ from the results on a computer with a different word size."

 

 

RU=====================================================================

Проект основан на исходниках (на С++) библиотеки MPIR, Edition 3.0.0.
Полностью написан на С/С++.
DLL c COM интерфейсом. Реализованы dual-интерфейсы с Automation-совместимыми типами данных, структур
(поддержка как раннего связывания(статистической линковки), так и позднего(динамической)). Раннее - предпочтительнее в части скорости (на 50% быстрее).
Реализовано два класса: класс целых чисел с арифметикой (BignumArithmeticInteger) и класс чисел с плавающей точкой (BignumArithmeticFloat).

При создании экземпляра класса создается массив из чисел с арифметикой. К Bignum числам можно обращаться по номерам (была задумка ввести имя, но оправдывает ли это удобство потери в скорости?)
BignumArithmeticInteger (Bignum) увеличивается в памяти по мере расчета автоматически, перераспределяя память.
BignumArithmeticFloat (Bignum), задается изначально, т.к. дробь может быть бесконечной (по умолчанию принимается минимальный размер).
Размер чисел ничем не ограничен, кроме вашей оперативки.

Регистрация COM реализовано как под админом, так и под пользователем (актуально в офисной части клиентов)
Регистрация стандартная:

Админ: Regsvr32 "FullName.DLL"

Пользователь: Regsvr32 /i /n "FullName.DLL"

 

Удалить из реестра:

Regsvr32 /u "FullName "

 

Обратите внимание, что функции BignumArithmeticFloat (Bignum) основаны на таком же принципе действия как и IEEE, но не предназначены для плавного расширения для арифметики IEEE P754. В частности, результаты, полученные на одном компьютере, часто отличаются от результатов на компьютере с другим размером машинного слова.

 

Свойства и Методы BignumArithmeticInteger

1.Help(); HTML Справка (без параметров).

 

2.BSTR* StringBSTR = Bignum(BYTE Bignum, LONG BignumBase=10) = BSTR* StringBSTR ; Свойство. Принимает и возвращает BSTR* строку StringBSTR (задает число или возвращает значение). Bignum-индекс длинного числа в массиве (0-255). BignumBase-база длинного числа (от 2 до 36), по умолчанию = 10.

 

3.LONG Val = Sign(BYTE Bignum); Свойство. Возвращает знак длинного числа LONG Val.Возвращает 1 если Bignum > 0, 0 если Bignum = 0, и -1 если Bignum < 0.

 

4.LONG Val = Even(BYTE Bignum); Свойство. Определяет, является ли Bignum четное или нечетное. Возвращает 1 - Bignum четное, 0 - Bignum нечетное.

 

5.LONG Val = Compare(BYTE Bignum1, BYTE Bignum2); Метод. Сравнивает два длинных числа. Возвращает 1 если Bignum1 > Bignum2, 0 если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.

 

6.BignumSet(BYTE Bignum, BSTR StringBSTR, LONG BignumBase=10); Метод. Задает число с параметрами аналогичными свойству Bignum()

 

7.Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Суммирует два длинных числа. BignumSet = Bignum1 + Bignum2

 

8.SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Суммирует длинное число с обычным. BignumSet = Bignum1 + LONG_PTR(х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

 

9.Abs(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает модуль значения из Bignum1 в BignumSet.

 

10.Negate(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet = - Bignum1.

 

11.Subtract(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Вычитает из одного длинного числа второе. BignumSet = Bignum1 - Bignum2

 

12.SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Вычитает из длинного числа обычное. BignumSet = Bignum1 - LONG_PTR.

 

13.Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Умножает одно длинное число на второе. BignumSet = Bignum1 * Bignum2.

 

14.MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Умножает длинное число на обычное. BignumSet = Bignum1 * LONG_PTR.

 

15.Divide(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, BYTE Bignum2); Метод. Делит одно длинное число на второе. При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / Bignum2.

 

16.DivideL(BYTE BignumQuotient, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Делит длинное число на обычное. При делении получаем частное в BignumQuotient, остаток от деления в BignumRemainder = Bignum1 / LONG_PTR.

 

17.Power(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Возводит в степень LONG_PTR длинное число Bignum1, результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.

 

18.Clone(BYTE BignumSet, BYTE Bignum1); Метод. Копирует Bignum1 в BignumSet. BignumSet = Bignum1

 

19.RootRem(BYTE BignumRoot, BYTE BignumRemainder, BYTE Bignum1, LONG_PTR n_root); Метод. Извлекает корень n_root-степени из Bignum1. Целочисленный результат возвращает в BignumRoot, остаток в BignumRemainder = (n-th root)√ Bignum1.

 

20.Factorial(BYTE BignumSet, LONG n); Метод. Возвращает в BignumSet факториал n!

 

21.Fibonacci(BYTE BignumSet, LONG_PTR n); Метод. Возвращает в BignumSet число Фибоначи n. Fn+1 = Fn + Fn-1

 

22.LucNum(BYTE BignumSet, LONG_PTR n); Метод. Возвращает в BignumSet число Лукоса n. Ln+1 =Ln + Ln-1

 

23.FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Метод. Загружает длинное число из файла (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10.

 

24.FileGet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Метод. Сохраняет длинное число в файл (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10.

 

25.Clear(LONG Bignum=-1); Метод. Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1.

 

26.LONG Val = BignumArraySize(); Метод. Возвращает количество чисел Bignum в созданном классе/массиве. Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а не как ранее 256 чисел. Размер увеличиваться автоматически.)

 

Свойства и Методы BignumArithmeticFloat

1.Help(); HTML Справка (без параметров).

 

2.LONG Val = SizeBits(BYTE Bignum, LONG_PTR* pVal) = .LONG Val; Свойство. Задает и возвращает размер длинного числа в БИТАХ LONG Val. Bignum-индекс длинного числа в массиве (0-255).

 

3.BSTR* String = Bignum(BYTE Bignum, LONG BignumBase=10, LONG_PTR Precision=0, BSTR Separator=”.”, VARIANT_BOOL Exponential=-1) = BSTR* String; Свойство. Принимает и возвращает BSTR* строку String (задает число или возвращает значение). Bignum-индекс длинного числа в массиве (0-255). BignumBase-база длинного числа (от 2 до 36), по умолчанию = 10. Precision – точность (кол-во цифр в числе), по умолчанию = 0 - максимальная (равна заданному размеру в битах). Separator – символ разделителя целой и дробной частей числа, по умолчанию точка(“.”). Exponential – по умолчанию =-1 экспоненциальная запись, 0 – десятичная (в разработке).

(При парсинге строки в число, ожидаемая десятичная точка берется из текущей локали, на системах, предоставляющих localeconv).

 

4.LONG Val = Sign(BYTE Bignum); Свойство. Возвращает знак длинного числа LONG Val.Возвращает 1 если Bignum > 0, 0 если Bignum = 0, и -1 если Bignum < 0.

 

5.LONG Val = Compare(BYTE Bignum1, BYTE Bignum2); Метод. Сравнивает два длинных числа. Возвращает 1 если Bignum1 > Bignum2, 0 если Bignum1 = Bignum2, и -1 если Bignum1 < Bignum2.

 

6.SizeBitsSet(BYTE Bignum, LONG_PTR SizeBits); Метод. Задает размер длинного числа в БИТАХ LONG Val.

 

7.BignumSet(BYTE Bignum, BSTR StringBSTR, LONG BignumBase=10, BSTR Separator=”.”); Метод. Задает число с параметрами аналогичными свойству Bignum().

 

8.Sum(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Суммирует два длинных числа. BignumSet = Bignum1 + Bignum2

 

9.SumL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Суммирует длинное число с обычным. BignumSet = Bignum1 + LONG_PTR(х64:LONG_PTR= LONGLONG, х32:LONG_PTR= LONG)

 

10.Abs(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает модуль значения из Bignum1 в BignumSet.

 

11.Subtract(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Вычитает из одного длинного числа второе. BignumSet = Bignum1 - Bignum2.

 

12.SubtractL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Вычитает из длинного числа обычное. BignumSet = Bignum1 - LONG_PTR.

 

13.Multiply(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Умножает одно длинное число на второе. BignumSet = Bignum1 * Bignum2.

 

14.MultiplyL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Умножает длинное число на обычное. BignumSet = Bignum1 * LONG_PTR.

 

15.Divide(BYTE BignumSet, BYTE Bignum1, BYTE Bignum2); Метод. Делит одно длинное число на второе. BignumSet = Bignum1 / Bignum2

 

16.DivideL(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Делит длинное число на обычное. BignumSet = Bignum1 / LONG_PTR.

 

17.Root(BYTE BignumSet, BYTE Bignum1); Метод. Извлекает квадратный корень из Bignum1. Результат возвращает в BignumSet. BignumSet = √ Bignum1.

 

18.Negate(BYTE BignumSet, BYTE Bignum1); Метод. Возвращает значение с противоположным знаком из Bignum1 в BignumSet. BignumSet = - Bignum1.

 

19.Power(BYTE BignumSet, BYTE Bignum1, LONG_PTR LONG_PTR); Метод. Возводит в степень LONG_PTR длинное число Bignum1, результат возвращает в BignumSet. BignumSet = Bignum1 ^ LONG_PTR.

 

20.Clone(BYTE BignumSet, BYTE Bignum1); Метод. Копирует Bignum1 в BignumSet. BignumSet = Bignum1

 

21.FileSet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10); Метод. Загружает длинное число из файла (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10.

(При парсинге строки в число, ожидаемая десятичная точка берется из текущей локали, на системах, предоставляющих localeconv).

 

22.FileGet(BYTE Bignum, BSTR StringBSTRFileName, LONG BignumBase=10, LONG_PTR Precision=0); Метод. Сохраняет длинное число в файл (*.txt). Принимает BSTR* строку StringBSTRFileName в качестве полного пути и имени файла. Bignum-индекс длинного числа в массиве (0-255). BignumBase-база числа (от 2 до 36), по умолчанию = 10. Precision – точность (кол-во цифр в числе), по умолчанию = 0 - максимальная (равна заданному размеру в битах).

 

23.Clear(LONG Bignum=-1); Метод. Освобождает память занятую длинным числом Bignum, или освобождает память занятую всеми числами при заданном параметре по умолчанию = -1.

24.LONG Val = BignumArraySize(); Метод. Возвращает количество чисел Bignum в созданном классе/массиве. Начиная с v2.0.0.0 (теперь массив чисел может быть произвольного размера, а не как ранее 256 чисел. Размер увеличиваться автоматически.)

25.
BSTR* String = GetToBignumInt(LONG Bignum, LONG BignumBase=10); Метод. Преобразовать Bignum из Float в Integer и вывести. ВАЖНО! преобразование происходит с заданной ранее точностью в битах для Float (SizeBitsSet). Без округлений, отбрасывается дробная часть. Будьте внимательнее в таких преобразованиях. Начиная с v2.0.0.0.

 RU=====================================================================

  

 

Interface (IDL)============================================================

CLSID (77d79ca3-15a0-4310-b8d8-0bcbe3f72d96)

library BedvitCOM

 

IID (314ada84-0668-4a3b-bc65-097f7547202a),

dual,

interface IBignumArithmeticInteger : IDispatch

{

[id(1), helpstring("Help")] HRESULT Help();

[propget, id(2), helpstring("Bignum(Bignum-number in the array, BignumBase(optional)=10 - the base may vary from 2 to 36). Convert Bignum/String(BSTR)")] HRESULT Bignum([in] BYTE Bignum, [in, defaultvalue(10L)] LONG  BignumBase, [out, retval] BSTR* pVal);

[propput, id(2), helpstring("Bignum(Bignum-number in the array, BignumBase(optional)=10 - the base may vary from 2 to 36). Convert Bignum/String(BSTR)")] HRESULT Bignum([in] BYTE Bignum, [in, defaultvalue(10L)] LONG  BignumBase, [in] BSTR newVal);

[propget, id(3), helpstring("Sign(Bignum). Sign Bignum. Return +1 if Bignum > 0, 0 if Bignum = 0, and -1 if Bignum < 0")] HRESULT Sign([in] BYTE Bignum, [out, retval] LONG* pVal);

[propget, id(4), helpstring("Even(Bignum). Determine whether Bignum is odd or even. Return 1 - even, 0 - odd")] HRESULT Even([in] BYTE Bignum, [out, retval] LONG* pVal);

[id(5), helpstring("Compare(Bignum1,Bignum2). Compare Bignum1 and Bignum2. Return +1 if Bignum1 > Bignum2, 0 if Bignum1 = Bignum2, and -1 if Bignum1 < Bignum2")] HRESULT Compare([in] BYTE Bignum1, [in] BYTE Bignum2, [out, retval] LONG* pVal);

[id(6), helpstring("BignumSet(Bignum-number in the array, StringBSTR - string-in, BignumBase(optional)=10 (2 to 36)). Convert String(BSTR) to Bignum")] HRESULT BignumSet([in] BYTE Bignum, [in] BSTR StringBSTR,[in, defaultvalue(10L)] LONG  BignumBase);

[id(7), helpstring("Sum(BignumSet, Bignum1, Bignum2). BignumSet = Bignum1 + Bignum2")] HRESULT Sum([in] BYTE BignumSet, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(8), helpstring("SumL(BignumSet, Bignum1, LONG_PTR). BignumSet = Bignum1 + LONG_PTR")] HRESULT SumL([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(9), helpstring("Abs(BignumSet, Bignum1). Set absolute value. BignumSet = Abs(Bignum1)")] HRESULT Abs([in] BYTE BignumSet, [in] BYTE Bignum1);

[id(10), helpstring("Negate(BignumSet, Bignum1). BignumSet = - Bignum1")] HRESULT Negate([in] BYTE BignumSet, [in] BYTE Bignum1);

[id(11), helpstring("Subtract(BignumSet, Bignum1, Bignum2). BignumSet = Bignum1 - Bignum2")] HRESULT Subtract([in] BYTE BignumSet, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(12), helpstring("SubtractL(BignumSet, Bignum1, LONG_PTR). BignumSet = Bignum1 - LONG_PTR")] HRESULT SubtractL([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(13), helpstring("Multiply(BignumSet, Bignum1, Bignum2). BignumSet = Bignum1 * Bignum2")] HRESULT Multiply([in] BYTE BignumSet, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(14), helpstring("MultiplyL(BignumSet, Bignum1, LONG_PTR). BignumSet = Bignum1 * LONG_PTR")] HRESULT MultiplyL([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(15), helpstring("Divide(BignumQuotient, BignumRemainder, Bignum1, Bignum2). BignumQuotient, BignumRemainder = Bignum1 / Bignum2. Divide(BignumQuotient - method 'truncate' , BignumRemainder, Bignum1, Bignum2)")] HRESULT Divide([in] BYTE BignumQuotient, [in] BYTE BignumRemainder, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(16), helpstring("DivideL(BignumQuotient, BignumRemainder, Bignum1, LONG_PTR). BignumQuotient, BignumRemainder = Bignum1 / LONG_PTR. DivideL(BignumQuotient - method 'truncate' , BignumRemainder, Bignum1, LONG_PTR")] HRESULT DivideL([in] BYTE BignumQuotient, [in] BYTE BignumRemainder, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(17), helpstring("Power(BignumSet, Bignum1,  LONG_PTR). BignumSet = Bignum1 ^ LONG_PTR")] HRESULT Power([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(18), helpstring("Clone(BignumSet, Bignum1). BignumSet = Bignum1")] HRESULT Clone([in] BYTE BignumSet, [in] BYTE Bignum1);

[id(19), helpstring("RootRem(BignumRoot, BignumRemainder, Bignum1, LONG_PTR n_root). BignumRoot, BignumRemainder = (n-th root)√ Bignum1")] HRESULT RootRem([in] BYTE BignumRoot, [in] BYTE BignumRemainder, [in] BYTE Bignum1, [in] LONG_PTR n_root);

[id(20), helpstring("Factorial(BignumSet, LONG n). BignumSet = !n")] HRESULT Factorial([in] BYTE BignumSet, [in] LONG n);

[id(21), helpstring("Fibonacci(BignumSet, LONG_PTR n). BignumSet = Fn, the n’th Fibonacci number")] HRESULT Fibonacci([in] BYTE BignumSet, [in] LONG_PTR n);

[id(22), helpstring("LucNum(BignumSet, LONG_PTR n). BignumSet = Ln, the n’th Lucas number")] HRESULT LucNum([in] BYTE BignumSet, [in] LONG_PTR n);

[id(23), helpstring("FileSet(Bignum-number in the array, StringBSTR - string-in FileName, BignumBase(optional)=10 (2 to 36)). Set Bignum from a File.")] HRESULT FileSet([in] BYTE Bignum, [in] BSTR StringBSTRFileName, [in, defaultvalue(10L)] LONG  BignumBase);

[id(24), helpstring("FileGet(Bignum-number in the array, StringBSTR - string-in FileName, BignumBase(optional)=10 (2 to 36)). Get Bignum to a File.")] HRESULT FileGet([in] BYTE Bignum, [in] BSTR StringBSTRFileName, [in, defaultvalue(10L)] LONG  BignumBase);

[id(25), helpstring("Clear(Bignum(optional)=-1). Free the space occupied by Bignum. If Bignum < 0 or Bignum > 255 then free the space occupied by All Bignum")] HRESULT Clear([in, defaultvalue(-1L)] LONG Bignum);

[id(26), helpstring("Bignum Array Size")] HRESULT BignumArraySize([out, retval] LONG* BignumArraySize);

 

 

IID (d8339ca1-1fff-4cf8-a262-0a9c0e3e36f4),

dual,

interface IBignumArithmeticFloat : IDispatch

{

[id(1), helpstring("Help")] HRESULT Help();

[propget, id(2), helpstring("SizeBits(Bignum). SizeBits - Set/Get bit size Bignum")] HRESULT SizeBits([in] BYTE Bignum, [out, retval] LONG_PTR* pVal);

[propput, id(2), helpstring("SizeBits(Bignum). SizeBits - Set/Get bit size Bignum")] HRESULT SizeBits([in] BYTE Bignum, [in] LONG_PTR newVal);

[propget, id(3), helpstring("Bignum(Bignum-number in the array, BignumBase(optional)=10 (2 to 36), Precision(optional) = 0 (0-Max, 1-... - number of digits), Separator(optional)='.', Exponential(optional) = 1 (1-Exponential entry, 0 - decimal)). Convert Bignum/String(BSTR)")] HRESULT Bignum([in] BYTE Bignum, [in, defaultvalue(10L)] LONG  BignumBase, [in, defaultvalue(0LL)] LONG_PTR Precision, [in, defaultvalue(".")] BSTR Separator, [in, defaultvalue(-1)] VARIANT_BOOL Exponential, [out, retval] BSTR* pVal);

[propput, id(3), helpstring("Bignum(Bignum-number in the array, BignumBase(optional)=10 (2 to 36), Precision(optional) = 0 (0-Max, 1-... - number of digits), Separator(optional)='.', Exponential(optional) = 1 (1-Exponential entry, 0 - decimal)). Convert Bignum/String(BSTR)")] HRESULT Bignum([in] BYTE Bignum, [in, defaultvalue(10L)] LONG  BignumBase, [in, defaultvalue(0LL)] LONG_PTR Precision, [in, defaultvalue(".")] BSTR Separator, [in, defaultvalue(-1)] VARIANT_BOOL Exponential, [in] BSTR newVal);

[propget, id(4), helpstring("Sign(Bignum). Sign Bignum. Return +1 if Bignum > 0, 0 if Bignum = 0, and -1 if Bignum < 0")] HRESULT Sign([in] BYTE Bignum, [out, retval] LONG* pVal);

[id(5), helpstring("Compare(Bignum1,Bignum2). Compare Bignum1 and Bignum2. Return +1 if Bignum1 > Bignum2, 0 if Bignum1 = Bignum2, and -1 if Bignum1 < Bignum2")] HRESULT Compare([in] BYTE Bignum1, [in] BYTE Bignum2, [out, retval] LONG* pVal);

[id(6), helpstring("SizeBitsSet(Bignum, SizeBits). Set bit size Bignum")] HRESULT SizeBitsSet([in] BYTE Bignum, [in] LONG_PTR SizeBits);

[id(7), helpstring("BignumSet(Bignum-number in the array, StringBSTR - string-in, BignumBase(optional)=10 (2 to 36), Separator(optional)='.'). Convert String(BSTR) to Bignum")] HRESULT BignumSet([in] BYTE Bignum,[in] BSTR StringBSTR, [in, defaultvalue(10L)] LONG  BignumBase, [in, defaultvalue(".")] BSTR Separator);

[id(8), helpstring("Sum(BignumSet, Bignum1, Bignum2). BignumSet = Bignum1 + Bignum2")] HRESULT Sum([in] BYTE BignumSet, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(9), helpstring("SumL(BignumSet, Bignum1, LONG_PTR). BignumSet = Bignum1 + LONG_PTR")] HRESULT SumL([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(10), helpstring("Abs(BignumSet, Bignum1). Set absolute value. BignumSet = Abs(Bignum1)")] HRESULT Abs([in] BYTE BignumSet, [in] BYTE Bignum1);

[id(11), helpstring("Subtract(BignumSet, Bignum1, Bignum2). BignumSet = Bignum1 - Bignum2")] HRESULT Subtract([in] BYTE BignumSet, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(12), helpstring("SubtractL(BignumSet, Bignum1, LONG_PTR). BignumSet = Bignum1 - LONG_PTR")] HRESULT SubtractL([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(13), helpstring("Multiply(BignumSet, Bignum1, Bignum2). BignumSet = Bignum1 * Bignum2")] HRESULT Multiply([in] BYTE BignumSet, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(14), helpstring("MultiplyL(BignumSet, Bignum1, LONG_PTR). BignumSet = Bignum1 * LONG_PTR")] HRESULT MultiplyL([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(15), helpstring("Divide(BignumSet, Bignum1, Bignum2). BignumSet = Bignum1 / Bignum2")] HRESULT Divide([in] BYTE BignumSet, [in] BYTE Bignum1, [in] BYTE Bignum2);

[id(16), helpstring("DivideL(BignumQuotient, BignumRemainder, Bignum1, LONG_PTR). BignumSet = Bignum1 / LONG_PTR")] HRESULT DivideL([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(17), helpstring("Root(BignumSet, Bignum1). BignumSet = √ Bignum1")] HRESULT Root([in] BYTE BignumSet, [in] BYTE Bignum1);

[id(18), helpstring("Negate(BignumSet, Bignum1). BignumSet = - Bignum1")] HRESULT Negate([in] BYTE BignumSet, [in] BYTE Bignum1);

[id(19), helpstring("Power(BignumSet, Bignum1, LONG_PTR). BignumSet = Bignum1 ^ LONG_PTR.")] HRESULT Power([in] BYTE BignumSet, [in] BYTE Bignum1, [in] LONG_PTR LONG_PTR);

[id(20), helpstring("Clone(BignumSet, Bignum1). BignumSet = Bignum1")] HRESULT Clone([in] BYTE BignumSet, [in] BYTE Bignum1);

[id(21), helpstring("FileSet(Bignum-number in the array, StringBSTR - string-in FileName, BignumBase(optional)=10 (2 to 36)). Set Bignum from a File.")] HRESULT FileSet([in] BYTE Bignum, [in] BSTR StringBSTRFileName, [in, defaultvalue(10L)] LONG  BignumBase);

[id(22), helpstring("FileGet(Bignum-number in the array, StringBSTR - string-in FileName, BignumBase(optional)=10 (2 to 36), Precision(optional) = 0 (0-Max, 1-... - number of digits)). Get Bignum to a File.")] HRESULT FileGet([in] BYTE Bignum, [in] BSTR StringBSTRFileName, [in, defaultvalue(10L)] LONG  BignumBase, [in, defaultvalue(0LL)] LONG_PTR Precision);

[id(23), helpstring("Clear(Bignum(optional)=-1). Free the space occupied by Bignum. If Bignum < 0 or Bignum > 255 then free the space occupied by All Bignum")] HRESULT Clear([in, defaultvalue(-1L)] LONG Bignum);

[id(24), helpstring("Bignum Array Size")] HRESULT BignumArraySize([out, retval] LONG* BignumArraySize);

[id(25), helpstring("Bignum Float Get To Bignum Integer. Return the integer part of number.")] HRESULT GetToBignumInt([in] LONG Bignum, [in, defaultvalue(10L)] LONG BignumBase, [out, retval] BSTR* pVal);

 

 

CLSID (7a302456-4426-48ac-a3ee-e4194b64896c)

interface IBignumArithmeticInteger;

 

CLSID (2a3d6235-750f-46c2-bca3-cb7f528f127c)

interface IBignumArithmeticFloat;

 

 Interface (IDL)============================================================

 

 

Were used in the project (freely distributable librarys):

MPIR library, Edition 3.0.0

http://mpir.org/
















Обработка txt (csv)-файлов (поиск, сортировка, удаление дубликатов, подсчёт строк и др.)










Инструменты для работы с массивами (сортировка, удаление дубликатов, транспонирование, изменение размерности с сохранением данных, фильтрация и т.д.)














Работа со строками:


+хеширование строки разными алгоритмами SHA (+ новейшие SHA3)

+получить/удалить любые символы Unicode из строки

+удалить из текста лишние пробелы

+поиск вхождения подстроки в строку

+заменить одну подстроку на другую

+поиск строки в одном массиве с выводом данных из второго массива (из соответствующей позиции найденного значению в первом массиве)











Генератор QR-кода + конвертации графических форматов из одного в другой


Sub QR_Generate_Fast()
    ActiveSheet.Shapes.AddPicture CreateObject("BedvitCOM.VBA").QRcodePrint("Здесь инфо для печати",Environ("Temp")&"\QR.png"),False,True,0,0,-1,-1
End Sub






https://www.cyberforum.ru/blogs/829006/6514.html






Unordered map - быстрая хеш-таблица, содержащая пары: уникальный ключ-значение

Быстрая замена для VBA таких контейнеров как: Collection и Dictionary (быстрее от нескольких раз до нескольких порядков)












Cериализация
и шифрование









Прочие команды (см. Wiki)

 









История в моем блоге на www.cyberforum.ru


Технические характеристики:

Последняя стабильная Release-версия (х32 и х64): 5.18 от 14/08/2025
Продукт написан на С/С++. Данные версии продуктов - распространяются бесплатно (см. Лицензия)

Начиная с версии BedvitCOM 5.0, поддерживается Windows8 и выше, т.е. не поддерживается Windows7, но периодически выходит спец. выпуск BedvitCOMwin7.

Реализованы dual-интерфейсы с Automation-совместимыми типами данных (поддержка раннего и позднего связывания).
При раннем связывании есть описание функционала и параметров.
Регистрация COM реализовано как под админом, так и под пользователем (актуально в офисной части клиентов)
Регистрация стандартная:
С правами Администратора: Regsvr32 "FullName.DLL" !ПОМНИМ! В Win10 регистрация под правами админа: "правая кнопка" - "Пуск" -"Командная строка (администратор)"
Или с правами ПользователяRegsvr32 /i /n "FullName.DLL" (рекомендуется регистрировать с правами пользователя)
Удалить из реестра: Regsvr32 /u "FullName.DLL"

 

 

 

Функционал:

 

BedvitCOM

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