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

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

Запись от bedvit размещена 06.08.2019 в 18:48
Обновил(-а) bedvit 11.02.2021 в 15:05 (BedvitXLL(v2.0.0.0))

Решил объединить все проекты по данной тематике в одно решение.
Теперь видео-описание и новые версии библиотек XLL и COM на сайте.

Более подробно по компонентам - в отдельных темах (будут линки).

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"

Примеры использования:
Кликните здесь для просмотра всего текста
Раннее связывание
Visual Basic
1
2
3
4
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat
bCOM.Help
End Sub
Позднее связывание
Visual Basic
1
2
3
4
5
6
7
Sub Help()
Dim bCOM
Set bCOM = CreateObject("BedvitCOM.BignumArithmeticFloat")
bCOM.Help
'или в одну строку
CreateObject("BedvitCOM.BignumArithmeticFloat").Help
End Sub
1C
1
2
bCOM = Новый COMОбъект("BedvitCOM.BignumArithmeticFloat");
bCOM.Help;



Содержит:
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 ArraySortS() - быстрая сортировка данных (String) в одномерном/двухмерном массиве
Кликните здесь для просмотра всего текста
Параметры метода:
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 - выводим индексы, "булево" 1/0 (тогда основной массив array_in_out - не меняется, выводятся данные в index_array_out )
9.index_array_out - одномерный массив с индексами (с учетом всех ключей), если задан out_array_index=1

Все параметры метода, кроме входящего массива - опциональные (с значениями по умолчанию - 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 - количество замен

3.6 ArraySortV() - быстрая сортировка данных (Variant) в одномерном/двухмерном массиве
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - указатель на массив (ввод/вывод)
2.key_1 - ключи сортировки (порядковый номер столбца, начиная с 1), по умолчанию - первый столбец.
3.sort_order1 - порядок сортировки для key_1 : 0-по возрастанию (по умолчанию для всех), 1-по убыванию
4.key_2 - по умолчанию - не участвует
5.sort_order2 - порядок сортировки для key_2
6.key_3 - по умолчанию - не участвует
7.sort_order3 - порядок сортировки для key_3
Ключи задаются по порядку, т.е. сразу указать 3й - нельзя.

3.7 Transpose() - быстрое транспонирование (на месте) двухмерного массива (поддерживаются все типы данных)
Кликните здесь для просмотра всего текста
Параметры метода:
1.array_in_out - указатель на массив (ввод/вывод)

3.8 QRcodePrint() - Генератор QR-кода

3.9 ConvertFormatImage() - конвертации графических форматов из одного в другой

3.10 GetRowsCountCSVansi() - возвращает кол-во строк в файле

3.11 GetRowCSVansi() - возвращает найденную строку по индексу

3.12 FindRowsInCSVansi() - возвращает найденную строку/строки по искомой подстроке

3.13 SortDeleteDuplicateRowsCSVansi() - сортировка и удаление дубликатов строк в csv/txt(ANSI) файлах

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


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

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

Примеры использования:
Кликните здесь для просмотра всего текста

Начиная с версии xll v1.0.3.0 рекомендуется использовать раннее связывание, т.к. теперь библиотека сама подключает COM в References и пользователю не нужно писать доп код или подключать вручную COM.

Раннее связывание, версия xll v1.0.3.0 и выше.
Visual Basic
1
2
3
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat: bCOM.Help
End Sub
Позднее связывание (одной строкой)
Visual Basic
1
2
3
Sub Help()
CreateObject("BedvitCOM.BignumArithmeticFloat").Help
End Sub
Раннее связывание (версии xll до v1.0.3.0) вариант 1 (подключаем СОМ в коде)
Visual Basic
1
2
3
4
5
6
7
8
9
Sub RUN_Help() 'подключаем СОМ в References, для раннего связывания
On Error Resume Next: ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0
Help
ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'отключаем библу в References
End Sub
 
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat: bCOM.Help
End Sub
Раннее связывание (версии xll до v1.0.3.0) вариант 2 (подключаем СОМ при открытии книги)
Visual Basic
1
2
3
Sub Help()
Dim bCOM As New BedvitCOM.BignumArithmeticFloat: bCOM.Help
End Sub
а в модуль книги
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    On Error Resume Next: ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
End Sub
 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    On Error Resume Next: ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'оключаем библу в References
End Sub
 
Private Sub Workbook_Open()
    On Error Resume Next: ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем библу "BedvitCOM" в References - version(1.0) для раннего связывания (если библа уже подключена - On Error Resume Next)
End Sub


Новые категории Функций в Excel:
1.XLLBignumArithmeticInteger - функции для работы с длинными целыми числами.
Функции:
1.1 SumInteger() - сложение двух длинных/обычных целых чисел
1.2 SubtractInteger() - вычитание двух длинных/обычных целых чисел
1.3 MultiplyInteger() - умножение двух длинных/обычных целых чисел
1.4 DivideInteger() - деление двух длинных/обычных целых чисел - Неполное частное
1.5 ModInteger() - деление двух длинных/обычных целых чисел - Остаток от деления
1.6 PowerInteger() - возведение в степень длинного/обычного целого числа
1.7 ConvertBaseInteger() - конвертирование целого числа (строки) из одной базы в другую (от 2 до 36).
1.8 FactorialInteger() - факториал задаваемого числа.

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 - результирующая строка

3.2 VlookupXLL() - это смесь ВПР() и ПРОСМОТР(). Подробное описание
Кликните здесь для просмотра всего текста
Параметры функции:
1.ArrayFind - массив для поиска
2.Find- значение, которое ищем
3.ArrayResult - значение во втором массиве, соответствующее найденному значению в первом массиве.

3.3 GetRowsCountCSVansi() - возвращает кол-во строк в файле

3.4 GetRowCSVansi() - возвращает найденную строку по индексу

3.5 FindRowsInCSVansi() - возвращает найденную строку/строки по искомой подстроке

Версии библиотек можно посмотреть в имени архива или свойствах файла.
В XLL эти свойства скрыты, нужно временно сменить расширение файла на DLL, см. рис. ниже.


02/02/2021 - новая версия библиотеки XLL - 2.0.0.0
Добавлена вкладка команд.
Миниатюры
Нажмите на изображение для увеличения
Название: BedvitCOM_FilterUnicodeChar.PNG
Просмотров: 294
Размер:	50.1 Кб
ID:	5495   Нажмите на изображение для увеличения
Название: BedvitXLL_FilterUnicodeChar.PNG
Просмотров: 318
Размер:	28.3 Кб
ID:	5496   Нажмите на изображение для увеличения
Название: BedvitXLL_КатегорииNew.PNG
Просмотров: 288
Размер:	23.6 Кб
ID:	5499  

Нажмите на изображение для увеличения
Название: BedvitXLL-factorial.PNG
Просмотров: 211
Размер:	18.1 Кб
ID:	5649   Нажмите на изображение для увеличения
Название: BedvitCOM_References.PNG
Просмотров: 104
Размер:	90.0 Кб
ID:	6445   Нажмите на изображение для увеличения
Название: bedvit_ver.PNG
Просмотров: 114
Размер:	31.0 Кб
ID:	6451  

Нажмите на изображение для увеличения
Название: RibbonXLL2.PNG
Просмотров: 18
Размер:	69.2 Кб
ID:	6780  
Изображения
  
Вложения
Тип файла: zip BedvitXLL(v1.0.3.2).zip (1.26 Мб, 187 просмотров)
Тип файла: zip BedvitCOM(v1.0.3.2).zip (967.3 Кб, 159 просмотров)
Тип файла: zip BedvitXLL(v1.0.3.5beta).zip (1.29 Мб, 104 просмотров)
Размещено в Без категории
Просмотров 3602 Комментарии 17
Всего комментариев 17
Комментарии
  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
  8. Старый комментарий
    Аватар для bedvit
    26/08/2019 - v 1.0.1.0
    Добавлен метод "ArraySortV" - быстрая сортировка данных (Variant) в одномерном/двухмерном массиве.
    Существующий метод "ArraySort" переименован в "ArraySortS" - сортировка данных (String) в одномерном/двухмерном массиве.
    Запись от bedvit размещена 26.08.2019 в 23:34 bedvit на форуме
    Обновил(-а) bedvit 26.08.2019 в 23:54
  9. Старый комментарий
    Аватар для bedvit
    02/09/2019 - v 1.0.1.5
    Добавлен метод Transpose - быстрое транспонирование (на месте) двухмерного массива (поддерживаются все типы данных).
    Запись от bedvit размещена 04.09.2019 в 10:35 bedvit на форуме
  10. Старый комментарий
    Аватар для bedvit
    12/12/2019 - v 1.0.2.0
    Добавлены функции в блок: XLLBignumArithmeticInteger и в блок XLL
    Запись от bedvit размещена 12.12.2019 в 18:50 bedvit на форуме
  11. Старый комментарий
    По сведениям полученным из осведомлённых источников ядро новой bedvitOS будет использовать новый тип логики от Баженова.
    Запись от untyped размещена 12.12.2019 в 20:06 untyped вне форума
  12. Старый комментарий
    Аватар для bedvit
    Спасибо тебе, добрый человек, за инфо.
    Баженов на запросы не отвечает, что ему несвойственно, посему не будет bedvitOS с нескучными обоями, bedvit-плеера и bedvit-антивируса. Извините, кто ж знал, что так получится.
    Запись от bedvit размещена 13.12.2019 в 09:42 bedvit на форуме
  13. Старый комментарий
    Аватар для SoftIce
    bedvit-ствую всех! К меня bedvit-вопрос. А кому-то это bedvit-ство вообще нужно ?

    bedvit за внимание.
    Запись от SoftIce размещена 13.12.2019 в 11:26 SoftIce вне форума
  14. Старый комментарий
    Аватар для bedvit
    SoftIce, нужно что?
    1.Если последние комментарии - да, ни о чем, так вода. Не знаю зачем они здесь. Кому они полезны в таком виде.
    2.Если по названию библиотек, тренировался, назвал по нику - вот и все, без претензий на оригинальность и избранность. Было удобно идентифицировать на форуме (не только этом), откуда/чья библиотека.
    3.Если по функционалу - опять же попилил (может и поговокодил, не мне судить) в целях профилактики застойных явлений в ГМ.
    Сама длинная арифметика узкоспециализированное решение, нужное узкому кругу спецов - это понятно и данное решение революцию не предполагает.
    А суть в том, что можно же в данный механизм реализовать любой нужный функционал (кроме GUI), который можно использовать в Excel или в продуктах поддерживающих СОМ.
    Нужно ли это - вопрос.
    Готов послушать вашу точку зрения.
    Запись от bedvit размещена 13.12.2019 в 12:21 bedvit на форуме
  15. Старый комментарий
    Аватар для bedvit
    21/08/2020 XLL версия v1.0.3.0
    Начиная с версии xll v1.0.3.0 рекомендуется использовать раннее связывание, т.к. теперь библиотека сама подключает COM в References и пользователю не нужно писать доп. код или подключать вручную COM.
    Преимуществом раннего связывания в VBA является то, что видны все методы и свойства объектов, возможность их выбора из выпадающего списка, полное описание всех свойств и методов библиотеки в обозревателе объектов (F2), а также скорость кода.
    Подключение осуществляется в открытой книге, в файле не сохраняется (не возникает ошибки подключения на другом ПК, где нет XLL).
    Запись от bedvit размещена 21.08.2020 в 13:04 bedvit на форуме
    Обновил(-а) bedvit 21.08.2020 в 13:06
  16. Старый комментарий
    Аватар для bedvit
    Обнаружена интересная особенность: событиями Excel делится сначала с VBA, потом с С++ (с DLL).
    Из этого вытекает следующее:
    1. Код VBA всегда будет опережать по событиям код из XLL.
    2. Это нужно учитывать в своих проектах при использовании DLL.

    В частности, в моем случае, при обработки 3х событий в VBA - открытия книги, создания новой или после сохранения книги, автоматическое подключения библиотеки СОМ в References (в для раннего связывания) будет происходить после кода VBA.

    Решением в данном случае (для VBA, который будет использовать одновременно и эти 3-и события и функционал XLL и раннее связывание) может быть следующее:
    1.(предпочтительный) Дать секунду времени для загрузки xll (для авто-подключения COM), к примеру так
    Visual Basic
    1
    
    Application.OnTime TimeValue(Now + TimeValue("0:00:01")), "Ваш_Макрос"
    2. Ручное подключение COM в References (при выключенной XLL). Такие подключения XLL не трогает и они сохраняются вместе с файлом под вашу ответственность (условия: СОМ должна быть уже зарегистрирована)
    3. Использовать при таких событиях позднее связывание вместо раннего (условия: СОМ должна быть уже зарегистрирована)
    4. Опередить XLL и самостоятельно подключить COM для раннего связывания - кодом
    Visual Basic
    1
    
    ThisWorkbook.VBProject.References.AddFromGuid "{77D79CA3-15A0-4310-B8D8-0BCBE3F72D96}", 1, 0 ' подключаем COM в References"
    (это подключение останется с файлом, как в 1-м варианте)
    Если не хотим сохранять подключение, можно кодом отключить
    Visual Basic
    1
    
    ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("BedvitCOM") 'отключаем СОМ в References
    (см. примеры использования в основной теме под спойлером)
    (условия: СОМ должна быть уже зарегистрирована)

    Лично, пользуюсь 1-м вариантом - самым простым и универсальным (для остальных решений есть определенные условия их применения, см.условия).
    Запись от bedvit размещена 26.08.2020 в 19:04 bedvit на форуме
    Обновил(-а) bedvit 21.10.2020 в 11:35
  17. Старый комментарий
    Аватар для bedvit
    02/02/2021 - новая версия библиотеки XLL - 2.0.0.0
    Большое обновление.
    Добавлена вкладка команд и контекстное меню.
    Добавлен набор команд (описание на сайте)

    Куплен хостинг (потренируюсь в HTML и JavaScript), если будет время оформлю там видео-описание по функционалу библиотек.
    Запись от bedvit размещена 05.02.2021 в 17:36 bedvit на форуме
    Обновил(-а) bedvit 05.02.2021 в 17:39
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.