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

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

15.03.2023, 13:31. Показов 4184. Ответов 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
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
16.03.2023, 10:03  [ТС]
Студворк — интернет-сервис помощи студентам
Мне этот сервиспак сильно и не нужен. Пользовательские элементы управления я не пишу, тем более. А по словам зэ трика только там существенные ошибки исправлены.

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

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

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

Добавлено через 4 минуты
Ещё там тип данных должен быть Variant иначе не будет работать. Массив должен быть As Variant.
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
16.03.2023, 12:14
Цитата Сообщение от HackerVlad Посмотреть сообщение
а что такое ТС?
Топик-стартер
Цитата Сообщение от HackerVlad Посмотреть сообщение
Вообще я этот код сам не писал, а взял отсюда: Работа с DLL в Visual Basic (статья)
Видел также раньше этот код и даже использовал, на единственной написанной мной программе на vb, про vba не помню, но очевидно так как вы пишете, видимо аксемблрные вставки..
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
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
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
16.03.2023, 15:48
Цитата Сообщение от HackerVlad Посмотреть сообщение
попробуйте написать тогда любую другую функцию для проверки
С этим понятно работает даже не интересно проверять, не очень ясен вопрос, смогу ли я исполльзовать функции, скажем не из модуля класса а из обычного, или обязательно нужно в начале инициализировать класс? Вот кстати не получилось из обычного, но может есть какие-то рецепты?
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
16.03.2023, 18:05  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
инициализировать класс
Инициализировать, думаю, не обязательно. Всё так же, как и с обычными классами должно быть. Только жаль нельзя просто функции вызывать из модулей.
0
 Аватар для Mikle Quits
1024 / 313 / 18
Регистрация: 21.01.2023
Сообщений: 552
16.03.2023, 19:35
Цитата Сообщение от HackerVlad Посмотреть сообщение
Только жаль нельзя просто функции вызывать из модулей.
Пишешь в Dll класс, у которого выставляешь Instancing = GlobalMultiUse, потом компилируешь Dll, при подключении этой Dll все Public функции класса с Instancing = GlobalMultiUse видятся без объявления переменной экземпляра класса и без имени объекта с точкой перед именем функции, как будто это не класс, а обычный модуль.
2
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
16.03.2023, 19:45  [ТС]
Initialize тогда точно не обязательно

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

Visual Basic
1
2
3
Private Sub Class_Initialize()
 
End Sub
Можно абсолютно ничего не писать?
0
 Аватар для Mikle Quits
1024 / 313 / 18
Регистрация: 21.01.2023
Сообщений: 552
16.03.2023, 19:49
Цитата Сообщение от HackerVlad Посмотреть сообщение
Можно абсолютно ничего не писать?
Ничего не нужно, просто класс, а внутри функции, как в модуле.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
16.03.2023, 20:01  [ТС]
Да, проверил, всё работает. Спасибо. Написал тестовую библиотеку с функцией создания нескольких папок.
На удивление на этот раз у меня всё с первого раза заработало и без глюков.
Вложения
Тип файла: zip My ActiveX DLL 2.zip (14.5 Кб, 21 просмотров)
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
17.03.2023, 02:23
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Пишешь в Dll класс, у которого выставляешь Instancing = GlobalMultiUse
На vba не прокатило, при попытке заюзать функцию таким макаром пишет "ActiveX component can'tcreate object". Хотелось бы, чтобы при подключении dll-ки можно было использовать ее функции, как функции листа в Экселе.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
17.03.2023, 17:43  [ТС]
testuser2, а с функцией сортировки так ничего и не получилось в VBA?
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
17.03.2023, 18:07
Цитата Сообщение от testuser2 Посмотреть сообщение
На vba не прокатило, при попытке заюзать функцию таким макаром пишет "ActiveX component can'tcreate object". Хотелось бы, чтобы при подключении dll-ки можно было использовать ее функции, как функции листа в Экселе.
Скинь свою dll.
0
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
17.03.2023, 18:15  [ТС]
Проще уже написать на PowerBasic DLL по быстрому тогда. Попробую написать для сортировки массива.
0
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 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
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
17.03.2023, 18:48
testuser2, написать можно и нативную DLL при желании. Или даже так (почти как в С). Я писал вообще драйвер который работает в ядре, но ActiveX DLL в 99% достаточно, по скорости они ничем не хуже, а по функционалу намного превосходят обычные плоские функции. VB6 будет однозначно быстрее VBA, VBA компилирует только в P-код. Хотя многое зависит от кода, но на VB6 можно написать в любом случае более производительный код (только если это не касается кроссбитности, где вся производительность "убьется" на переключении).

Добавлено через 3 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
Там в общем-то был просто муляж. Модуль и клас с одной и той же функцией, клсс с установленным Instancing = GlobalMultiUse. Стыдно такое скидывать )
Что-то с регистрацией у тебя, либо переместил DLL, либо что-то еще. Офис 32 битный должен быть.
1
1412 / 878 / 93
Регистрация: 08.02.2017
Сообщений: 3,753
Записей в блоге: 2
17.03.2023, 19:21
Цитата Сообщение от The trick Посмотреть сообщение
VBA компилирует только в P-код
просто видел комментарий, в обсуждении на хабре, там была ссылка на статью, где объяснялась логика работы антивиря, и, в частности затрагивалось, то что в файлах оффиса в их структуре в одном бинарике выделена определенная часть для хранения скомпиленного p-кода, и рядом с ним также для native - кода..
Цитата Сообщение от The trick Посмотреть сообщение
Что-то с регистрацией у тебя, либо переместил DLL, либо что-то еще. Офис 32 битный должен быть.
В общем-то библа работает если объявить класс as new и технически это вроде не особо отлично от GlobalMultiUse. Интересно было бы проверить выгоду в скорости исполнения библиотечных функций в качестве udf (функций листа Excel), но видимо тема посложнее, чем пару раз кликнуть мышкой )
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
17.03.2023, 19:24
Цитата Сообщение от testuser2 Посмотреть сообщение
файлах оффиса в их структуре в одном бинарике выделена определенная часть для хранения скомпиленного p-кода, и рядом для native - кода..
В файлах офиса хранится P-код и исходный код, а не нативный ))) Если версия вба совпадает, то исходный код не перекомпилируется в P-код, а используется прямо готовый из файла.
1
Вернулся
 Аватар для HackerVlad
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
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
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru