Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801

Как правильно подключать Reference библиотеки TLB и ActivX DLL

15.03.2023, 13:31. Показов 3856. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня вопрос вполне простой. Когда я нажимаю Ctrl+T и пытаюсь подключить свою библиотеку, то выскакивает ошибка и это невозможно. Долго искал как в IDE VB6 подключать библиотеки так и не нашёл. В итоге приходится всегда самому прописывать в VBP файл строки добавления библиотек! А это не очень удобно, потому как приходится пользоваться специально утилитой для определения GUID.
Например:
Reference=*\G{9108FC9B-D45F-454B-AF9C-3E62FDAC5132}#2.0#0#vbToolTips2.dll#vbTo olTips2 ()

Помогите пожалуйста. Я не знаю куда нажать чтобы делать это в IDE.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2023, 13:31
Ответы с готовыми решениями:

Для использования своего ActivX элемент (DLL библиотеки)
Скажите обязательно элимент надо регистрировать или достаточно его Написать,где-то разместить и каким то образом Указать где он...

Как подключать dll библиотеки в VS
Когда подключал opencv нужно было просто указать пути к заголовочным и lib файлам. Но вот скачал другую библиотеку, а там никаких .lib и...

Как правильно подключать файлы и библиотеки.
Может я плохо ищу, а может действительно очень много информации как, но нет как правильно. Я пользуюсь Atmel Studyo 7. Вопрос. Как...

61
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
16.03.2023, 10:03  [ТС]
Студворк — интернет-сервис помощи студентам
Мне этот сервиспак сильно и не нужен. Пользовательские элементы управления я не пишу, тем более. А по словам зэ трика только там существенные ошибки исправлены.

Добавлено через 1 минуту
The trick кстати это трюкач переводится либо фокусник)))
0
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 2
16.03.2023, 11:53
Цитата Сообщение от The trick Посмотреть сообщение
Если не работает - скидывай, глянем.
Неполадка как оказалось не в механизме подключения библиотеки из примера уважаемого ТС-а, а видимо в несовместимости кода сортировки с движком VBA. Экземпляр класса из библиотеки создается, процедура "Initialize" проходит нормально, процедура "SystemSort" также работает, т.е. благополучно рапортует об ошибке, если задать пустой массив, однако если задать массив, такой как в примере (variant: "груши", "ябоки"..) происходит вылет с просьбой перезапуска Эекселя.
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
16.03.2023, 12:06  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
ТС-а
а что такое ТС?

Добавлено через 2 минуты
Я рекомендую тогда попробовать написать любую другую простую функцию и проверить. Возможно, CDecl функции в VBA не пойдут. Там ведь ассемблерная вставка для вызова CDecl.

Добавлено через 3 минуты
Вообще я этот код сам не писал, а взял отсюда: Работа с DLL в Visual Basic (статья)
Я просто захотел научиться писать библиотеки на этом примере.
А функцию, как раз, скорее всего, The trick писал, мне кажется...

Добавлено через 4 минуты
Ещё там тип данных должен быть Variant иначе не будет работать. Массив должен быть As Variant.
0
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 2
16.03.2023, 12:14
Цитата Сообщение от HackerVlad Посмотреть сообщение
а что такое ТС?
Топик-стартер
Цитата Сообщение от HackerVlad Посмотреть сообщение
Вообще я этот код сам не писал, а взял отсюда: Работа с DLL в Visual Basic (статья)
Видел также раньше этот код и даже использовал, на единственной написанной мной программе на vb, про vba не помню, но очевидно так как вы пишете, видимо аксемблрные вставки..
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
16.03.2023, 14:17  [ТС]
testuser2, попробуйте написать тогда любую другую функцию для проверки. Вот например только сегодня как раз написал функцию создания нескольких каталогов (MkDir создаёт только один):
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
' Функция создаёт ровно столько каталогов, сколько надо
Public Function MakeDir(Path As String) As Boolean
    On Error GoTo Quit
    
    Dim DirPath As String
    Dim CurrentDirPath As String
    Dim DirPathPenultimate As String
    Dim IsDir As Boolean
    Dim DirAttr As Long
    Dim pos As Long
    Dim f1 As Long
    Dim f2 As Long
    Dim i As Long
    
    DirPath = Path
    
    If Right$(DirPath, 1) = "\" Then
        DirPath = Left$(DirPath, Len(DirPath) - 1) ' Убрать на конце косую черту, если есть
    End If
    
    f1 = InStrRev(DirPath, "\")
    f2 = InStr(DirPath, "\")
    
    If f1 > 0 Then
        If f1 = f2 Then ' Только одна косая черта (создаётся каталог в корне диска)
            MkDir DirPath ' Err 75 or 76
            MakeDir = True
        Else ' Несколько косых черт (создаётся каталог, глубже чем в корне диска)
            DirPathPenultimate = Left$(DirPath, f1 - 1)
            
            If Dir$(DirPathPenultimate, vbDirectory + 7) <> vbNullString Then
                DirAttr = GetAttr(DirPathPenultimate)
                
                If (DirAttr And vbDirectory) <> 0 Then ' Если предпоследний каталог в цепочке действительно существует
                    MkDir DirPath ' Создаётся только один каталог
                    MakeDir = True
                    Exit Function
                End If
            End If
            
            ' Создаётся два или больше двух каталогов сразу
            DirPath = DirPath & "\"
            pos = 1
            
            Do
                i = InStr(pos, DirPath, "\") ' Искать нужную нам строку
                
                If i > 0 Then
                    CurrentDirPath = Mid$(DirPath, 1, i - 1)
                    IsDir = False
                    
                    If Dir$(CurrentDirPath, vbDirectory + 7) <> vbNullString Then
                        DirAttr = GetAttr(CurrentDirPath)
                        
                        If (DirAttr And vbDirectory) <> 0 Then
                            IsDir = True
                        End If
                    End If
                    
                    If IsDir = False Then MkDir CurrentDirPath: MakeDir = True
                    pos = i + 1
                End If
            Loop While i > 0 ' Выполнять цикл до тех пор, пока будет найдена искомая подстрока
        End If
    End If
Quit:
End Function
0
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 2
16.03.2023, 15:48
Цитата Сообщение от HackerVlad Посмотреть сообщение
попробуйте написать тогда любую другую функцию для проверки
С этим понятно работает даже не интересно проверять, не очень ясен вопрос, смогу ли я исполльзовать функции, скажем не из модуля класса а из обычного, или обязательно нужно в начале инициализировать класс? Вот кстати не получилось из обычного, но может есть какие-то рецепты?
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
16.03.2023, 18:05  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
инициализировать класс
Инициализировать, думаю, не обязательно. Всё так же, как и с обычными классами должно быть. Только жаль нельзя просто функции вызывать из модулей.
0
 Аватар для Mikle Quits
787 / 308 / 17
Регистрация: 21.01.2023
Сообщений: 531
16.03.2023, 19:35
Цитата Сообщение от HackerVlad Посмотреть сообщение
Только жаль нельзя просто функции вызывать из модулей.
Пишешь в Dll класс, у которого выставляешь Instancing = GlobalMultiUse, потом компилируешь Dll, при подключении этой Dll все Public функции класса с Instancing = GlobalMultiUse видятся без объявления переменной экземпляра класса и без имени объекта с точкой перед именем функции, как будто это не класс, а обычный модуль.
2
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
16.03.2023, 19:45  [ТС]
Initialize тогда точно не обязательно

Добавлено через 5 минут
Внутрь

Visual Basic
1
2
3
Private Sub Class_Initialize()
 
End Sub
Можно абсолютно ничего не писать?
0
 Аватар для Mikle Quits
787 / 308 / 17
Регистрация: 21.01.2023
Сообщений: 531
16.03.2023, 19:49
Цитата Сообщение от HackerVlad Посмотреть сообщение
Можно абсолютно ничего не писать?
Ничего не нужно, просто класс, а внутри функции, как в модуле.
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
16.03.2023, 20:01  [ТС]
Да, проверил, всё работает. Спасибо. Написал тестовую библиотеку с функцией создания нескольких папок.
На удивление на этот раз у меня всё с первого раза заработало и без глюков.
Вложения
Тип файла: zip My ActiveX DLL 2.zip (14.5 Кб, 21 просмотров)
0
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 2
17.03.2023, 02:23
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Пишешь в Dll класс, у которого выставляешь Instancing = GlobalMultiUse
На vba не прокатило, при попытке заюзать функцию таким макаром пишет "ActiveX component can'tcreate object". Хотелось бы, чтобы при подключении dll-ки можно было использовать ее функции, как функции листа в Экселе.
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
17.03.2023, 17:43  [ТС]
testuser2, а с функцией сортировки так ничего и не получилось в VBA?
0
Модератор
10063 / 3908 / 885
Регистрация: 22.02.2013
Сообщений: 5,857
Записей в блоге: 79
17.03.2023, 18:07
Цитата Сообщение от testuser2 Посмотреть сообщение
На vba не прокатило, при попытке заюзать функцию таким макаром пишет "ActiveX component can'tcreate object". Хотелось бы, чтобы при подключении dll-ки можно было использовать ее функции, как функции листа в Экселе.
Скинь свою dll.
0
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
17.03.2023, 18:15  [ТС]
Проще уже написать на PowerBasic DLL по быстрому тогда. Попробую написать для сортировки массива.
0
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 2
17.03.2023, 18:40
Цитата Сообщение от HackerVlad Посмотреть сообщение
а с функцией сортировки так ничего и не получилось в VBA
Не проверял, поскольку нет особой потребности в подобной функции. Интересна больше физика общения с vb-шной библиотекой в VBA. Видимо в vba она живет по законам vba.. И в принципе достатчно такого общего понимания, хотя если выснится еще что-то интересненькое, не прочь это "сцапать" в "копилку". Смысл такой бибиотеки для vba определенно есть, если, допустим, хотеть защитить от просмотра свой код. И, кто его знает, может она еще и быстрее, ведь она скомпиленная. Хотя видел такой комментарий, что vba также компилится, причем даже в "native". Интересно, проводилсь ли когда-нибудь сравнения скорости VB и VBA(?)

Добавлено через 12 минут
Цитата Сообщение от The trick Посмотреть сообщение
Скинь свою dll.
Там в общем-то был просто муляж. Модуль и клас с одной и той же функцией, клсс с установленным Instancing = GlobalMultiUse. Стыдно такое скидывать )
Visual Basic
1
2
3
Function testfunctionCl(a)
    testfunctionCl = a + 1
End Function
0
Модератор
10063 / 3908 / 885
Регистрация: 22.02.2013
Сообщений: 5,857
Записей в блоге: 79
17.03.2023, 18:48
testuser2, написать можно и нативную DLL при желании. Или даже так (почти как в С). Я писал вообще драйвер который работает в ядре, но ActiveX DLL в 99% достаточно, по скорости они ничем не хуже, а по функционалу намного превосходят обычные плоские функции. VB6 будет однозначно быстрее VBA, VBA компилирует только в P-код. Хотя многое зависит от кода, но на VB6 можно написать в любом случае более производительный код (только если это не касается кроссбитности, где вся производительность "убьется" на переключении).

Добавлено через 3 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
Там в общем-то был просто муляж. Модуль и клас с одной и той же функцией, клсс с установленным Instancing = GlobalMultiUse. Стыдно такое скидывать )
Что-то с регистрацией у тебя, либо переместил DLL, либо что-то еще. Офис 32 битный должен быть.
1
1407 / 866 / 93
Регистрация: 08.02.2017
Сообщений: 3,699
Записей в блоге: 2
17.03.2023, 19:21
Цитата Сообщение от The trick Посмотреть сообщение
VBA компилирует только в P-код
просто видел комментарий, в обсуждении на хабре, там была ссылка на статью, где объяснялась логика работы антивиря, и, в частности затрагивалось, то что в файлах оффиса в их структуре в одном бинарике выделена определенная часть для хранения скомпиленного p-кода, и рядом с ним также для native - кода..
Цитата Сообщение от The trick Посмотреть сообщение
Что-то с регистрацией у тебя, либо переместил DLL, либо что-то еще. Офис 32 битный должен быть.
В общем-то библа работает если объявить класс as new и технически это вроде не особо отлично от GlobalMultiUse. Интересно было бы проверить выгоду в скорости исполнения библиотечных функций в качестве udf (функций листа Excel), но видимо тема посложнее, чем пару раз кликнуть мышкой )
0
Модератор
10063 / 3908 / 885
Регистрация: 22.02.2013
Сообщений: 5,857
Записей в блоге: 79
17.03.2023, 19:24
Цитата Сообщение от testuser2 Посмотреть сообщение
файлах оффиса в их структуре в одном бинарике выделена определенная часть для хранения скомпиленного p-кода, и рядом для native - кода..
В файлах офиса хранится P-код и исходный код, а не нативный ))) Если версия вба совпадает, то исходный код не перекомпилируется в P-код, а используется прямо готовый из файла.
1
Вернулся
 Аватар для HackerVlad
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,801
18.03.2023, 00:00  [ТС]
testuser2, а теперь попробуйте из VBA вызвать мою API-функцию для сортировки массива, которую я написал на PowerBasic, должно работать: Как правильно подключить функцию qsort к своему проекту на VB6
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2023, 00:00

CodeBlocks. Как правильно подключать библиотеки
Сделал подключение реализации вот таким способом но выдает такую ошибку не знаю, может неправильно кладу библиотеки, я их просто...

Как правильно подключать файл dll
Есть какая то прога на С++ запечатанная в DLL (Выход из нее был через exit) А тут вторая прога, которая её вызывает int...

Подскажите как правильно подключать библиотеки и решения. (функции уже определены в *.obj)
Вот тут взял самомопальный aes. Там есть 3 исходных кода. 3 - сама программа. 1 и 2 - библиотека и решение.

Как правильно подключить проект DLL библиотеки в VS 2019 Community?
В общем, такая проблема, я написал свою dll и планирую использовать её в двух разных решениях, в одном она уже используется, именно в нём...

Как правильно зарегистрировать TLB ?
Пытаюсь заставить работать Code Help Add-in. В readme сказано: Регистрирую, используя regasm (из состава сборки FrameWork...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru