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

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

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

Проект основан на исходниках (на С++) библиотеки MPIR, Edition 3.0.0.
Реализовано два класса: класс целых чисел с арифметикой (BignumArithmeticInteger) и класс чисел с плавающей точкой (BignumArithmeticFloat).

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

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

Обратите внимание, что функции 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.

 

Свойства и Методы 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.

 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);

 

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);

 

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/

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

 

 

 

 

 

 

 

 

 

 

 

 

 

3.Работа с массивами (сортировка, удаление дубликатов, транспонирование, изменение размерности с сохранением данных и т.д.)

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

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

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

Cравнения с Collection и Dictionary (быстрее от нескольких раз до нескольких порядков)
 

Подробнее в блоге

 

 

 

 

Примеры использования вышеописанного функционала и более подробный разбор свойств и методов в моем блоге на www.cyberforum.ru

 

 

Программа распространяется бесплатно.

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

Последняя стабильная Release-версия (х32 и х64): 1.0.5.0 от 06/08/2021
Продукт написан на С/С++

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

 

Функционал:

 

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

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