Форум программистов, компьютерный форум, киберфорум
Наши страницы
bedvit
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

BedvitCOM (библиотека COM/ActiveX) + BedvitXLL (библиотека XLL c C API Functions для Excel) С/С++

Запись от bedvit размещена 06.08.2019 в 18:48
Обновил(-а) bedvit Вчера в 10:03

Решил объединить все проекты по данной тематике в одно решение.
Здесь будет краткое описание и последние версии библиотек.
Более подробно по компонентам - в отдельных темах (будут линки).
Текущая Release версия:
BedvitXLL - v1.0.0.9
BedvitCOM - v1.0.0.9



1.BedvitCOM (библиотека COM/ActiveX)

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

Содержит:
1. Класс BignumArithmeticInteger - длинная арифметика с целыми числами.
Кликните здесь для просмотра всего текста
Свойства и Методы 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


2. Класс BignumArithmeticFloat - длинная арифметика с дробными числами.
Кликните здесь для просмотра всего текста
Свойства и Методы 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


3. Класс VBA - набор функций/методов для работы в VBA, COM/ActiveX поддерживающих приложениях
Методы:
3.1 ArraySort - быстрая сортировка данных в одномерном/двухмерном массиве
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - указатель на массив (ввод/вывод)
2.sort_order - порядок сортировки : 0-по возрастанию, 1-по убыванию
3.key_1 - ключи сортировки (индекс столбца или строки) по умолчанию - первый столбец/строка
4.key_2
5.key_3
6.sort_orientation - ориентация сортировки (0 - по строкам, 1 - по столбцам, 2- целый массив вывод строка-столбец, 3- целый массив вывод столбец-строка)
7.delete_duplicates - удаляем дубликаты (в одномерных массивах)
8.out_array_index - выводим индексы (тогда основной массив array_in_out - не меняется, выводятся данные в out_array_index)
9.out_array_index - одномерный массив с индексами (с учетом всех ключей)

Все параметры метода, кроме входящего массива - опциональные (с значениями по умолчанию - 0 (ключи-1))
Метод "ArraySort" работает через Variant, т.к. на некоторых скриптовых языках SAFEARRAY ходит через границы COM, только в обертке VARIANT (без изобретения костылей).

3.2 FilterUnicodeChar - получить/удалить любые символы Unicode из строки. Регистрозависимая.
Кликните здесь для просмотра всего текста
Параметры метода:
1. StringIn - входящая строка
2. Второй параметр (EnableChar) - символы включаемые в итоговую строку (через "-" указывается диапазон, сам "-" выводится/удаляется если его поставить первым или последним символом в шаблоне)
3. Третий параметр (DisableChar) - символы исключаемые из итоговой строки (через "-" указывается диапазон).

Последние два параметра - не обязательные. Можно задавать любой из них, можно все два, можно никакой - тогда выводится первоначальная строка

3.3 Trim - удаляет из текста все пробелы, за исключением одиночных пробелов между словами.
Кликните здесь для просмотра всего текста
Параметры метода:
1.StringIn - входящая строка
2.StringOut - результирующая строка

3.4 InStr - ищем первое вхождение подстроки в строку. Регистрозависимая.
Кликните здесь для просмотра всего текста
Параметры метода:
1.StringIn - строка в которой производим поиск
2.StringFind - подстрока для поиска в StringIn
3.Start - позиция с которой начинаем поиск в строке

3.5 Replace - заменить одну подстроку на другую. Параметр Start - не усекают строку, в отличии от стандартной Replace. Регистрозависимая
Кликните здесь для просмотра всего текста
Параметры метода:
1.StringIn - строка в которой производим поиск
2.StringFind - подстрока для поиска и замены в StringIn
3.StringReplace - подстрока на которую заменяем StringFind
3.Start - позиция с которой начинаем поиск и замены подстрок в строке
4.Count - количество замен


2.BedvitXLL (библиотека XLL c C API Functions для Excel)

Область применения - Excel 2010 (х32, х64) и выше, VBA
Содержит библиотеку BedvitCOM, распаковывает (в пользовательский "TEMP") и регистрирует автоматом COM при открытии XLL, и автоматически удаляет COM из реестра при закрытии XLL.
т.е. пользователю НЕ нужно ничего самостоятельно регистрировать, нужно только открыть XLL - всё, можно работать в Excel с новыми функциями и COM-объектами из библиотеки COM в VBA (как с ранним, так и с поздним связыванием).

Новые категории Функций в Excel:
1.XLLBignumArithmeticInteger - функции для работы с длинными целыми числами.
Функции:
1.1 ConvertBaseInteger - конвертирование целого числа (строки) из одной базы в другую (от 2 до 36).

2.XLLBignumArithmeticFloat - функции для работы с длинными дробными числами.
Функции:
2.1 SumFloat - сложение двух длинных/обычных чисел с плавающей точкой
2.2 SubtractFloat - вычитание двух длинных/обычных чисел с плавающей точкой
2.3 MultiplyFloat - умножение двух длинных/обычных чисел с плавающей точкой
2.4 DivideFloat - деление двух длинных/обычных чисел с плавающей точкой
2.5 PowerFloat - возведение в степень длинного/обычного числа
2.6 RootFloat - извлечение квадратного корня из длинного/обычного числа

3.XLL - функции не попавшие в другие категории данной библиотеки, с разнообразным функционалом.
Функции:
3.1 FilterUnicodeChar - получить/удалить любые символы Unicode из строки.
Кликните здесь для просмотра всего текста
Параметры функции:
1. StringIn - входящая строка
2. Второй параметр (EnableChar) - символы включаемые в итоговую строку (через "-" указывается диапазон, сам "-" выводится/удаляется если его поставить первым или последним символом в шаблоне)
3. Третий параметр (DisableChar) - символы исключаемые из итоговой строки (через "-" указывается диапазон).

Последние два параметра - не обязательные. Можно задавать любой из них, можно все два, можно никакой - тогда выводится первоначальная строка

3.2 TrimXLL - удаляет из текста все пробелы, за исключением одиночных пробелов между словами.
Кликните здесь для просмотра всего текста
Параметры функции:
1.StringIn - входящая строка
2.StringOut - результирующая строка
Миниатюры
Нажмите на изображение для увеличения
Название: BedvitCOM_FilterUnicodeChar.PNG
Просмотров: 43
Размер:	50.1 Кб
ID:	5495   Нажмите на изображение для увеличения
Название: BedvitXLL_FilterUnicodeChar.PNG
Просмотров: 34
Размер:	28.3 Кб
ID:	5496   Нажмите на изображение для увеличения
Название: BedvitXLL_Категории.PNG
Просмотров: 31
Размер:	24.2 Кб
ID:	5497  

Нажмите на изображение для увеличения
Название: BedvitXLL_КатегорииNew.PNG
Просмотров: 30
Размер:	23.6 Кб
ID:	5499  
Вложения
Тип файла: zip BedvitDLL(1.0.0.9).zip (1.47 Мб, 4 просмотров)
Размещено в Без категории
Просмотров 282 Комментарии 7
Всего комментариев 7
Комментарии
  1. Старый комментарий
    Аватар для SoftIce
    Слишком много Bedvit-ов. Они ничем не полезны для пользователя, только имена функций удлиняют.
    Скромнее надо быть.
    Запись от SoftIce размещена 07.08.2019 в 07:56 SoftIce вне форума
  2. Старый комментарий
    Аватар для Usaga
    Это неизбежная Bedvit-плата за использование Bedvit-библиотеки и написание Bedvit-кода для решения Bedvit-задач, Bedvit их побери.
    Запись от Usaga размещена 07.08.2019 в 09:18 Usaga вне форума
  3. Старый комментарий
    Аватар для bedvit
    SoftIce назовите хотя бы одну функцию с Bedvit. Библиотеки да, категории, что бы не перепутать со стандартными в Excel то же да (т.к. они относятся к данной библиотеки, поэтому и начинаются с названия библиотеки), функции и методы не одного.
    Возможно название категорий можно сменить, и сделать без названия библиотеки. Чисто теоретически, они могут совпасть с другими подгружаемыми библиотеками. Зато не будет везде Bedvit-ов!
    Ну а вообще, я рад что вы зашли в мой блог!
    Что еще плохо?
    Запись от bedvit размещена 07.08.2019 в 09:44 bedvit вне форума
  4. Старый комментарий
    Аватар для bedvit
    Поправил текст, теперь еще меньше bedvit-ов. Готов послушать замечания по существу.
    Запись от bedvit размещена 07.08.2019 в 09:48 bedvit вне форума
  5. Старый комментарий
    Аватар для bedvit
    Добавил два последних изображения с названиями категорий, с упоминанием названия библиотеки и без упоминания. Мнения?
    Запись от bedvit размещена 07.08.2019 в 11:09 bedvit вне форума
  6. Старый комментарий
    Аватар для bedvit
    Версия 1.0.0.6 - исправлена ошибка в функции FilterUnicodeChar в СОМ.DLL, скорректированы наименования категорий.
    Оставил "bedvit" только в наименовании библиотеки (удалил из категорий функций Excel). А так как, мало кто пишет XLL, думаю других похожих категорий не будет (конкурентов по наименованию).
    Запись от bedvit размещена 07.08.2019 в 12:55 bedvit вне форума
    Обновил(-а) bedvit 07.08.2019 в 13:01
  7. Старый комментарий
    Аватар для bedvit
    Д21/08/2019 - v 1.0.0.9
    1. InStr - на 2% быстрее предыдущей
    2. Replace - найдена ошибка, исправлена.
    Теперь быстрее на 1,5% замена символов и быстрее на 100% - если нет совпадений (в два раза).
    Добавлена проверка на переполнение BSTR-строки: E_OUTOFMEMORY
    Производительность функции - 1 млр. замен - 12,5 сек.
    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    Option Explicit
    Sub RUN() 'для раннего связывания
    'Подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
    'Для раннего связывания сначала включаем в References библу, потом в конце кода отключаем. Для позднего связывания этого не нужно (см.ниже).
    'Если BedvitCOM не оключать, могут быть ошибки в этом файле при отсутствии зарегестрированной BedvitCOM - выслали кому-то файл, или открыли из другого ПК и т.д., где не установлеена или не открыта надстройка BedvitXLL (которая автоматом распаковывает и регистрирует библиотеку BedvitCOM в реестре) или не зарегистрированна BedvitCOM вручную
    'References хранятся в файле
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
    Test
    ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'оключаем библу в References
    End Sub
      
    Sub Test()
    Dim s As String, x, t, s1, s2, s3
    Dim bVBA As BedvitCOM.VBA: Set bVBA = New BedvitCOM.VBA 'раннее связывание
    'Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание
      
    s = String$(1000000000, "1")
    s1 = "1"
    s2 = "2"
      
    t = Timer
    For x = 1 To 1
    s3 = bVBA.Replace(s, s1, s2)
    Next
    Debug.Print "bVBA.Replace "; Timer - t, "size"; Len(s3)
      
    End Sub
    Запись от bedvit размещена 21.08.2019 в 18:58 bedvit вне форума
    Обновил(-а) bedvit 21.08.2019 в 19:45
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru