Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/68: Рейтинг темы: голосов - 68, средняя оценка - 4.59
238 / 49 / 6
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1

Создание DLL

23.07.2013, 16:20. Показов 14048. Ответов 103
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код программы (пример использования DLL):
Visual Basic
1
2
3
4
5
6
Option Explicit
Private Declare Function Symma Lib "Summ.dll" Alias "Summ" (ByVal a As Integer, ByVal b As Integer) As Integer
 
Private Sub Command1_Click()
Text3.Text = Symma(Val(Text1.Text), Val(Text2.Text))
End Sub
Код DLL (точнее ActiveX DLL):
Visual Basic
1
2
3
Private Function Summ(ByVal a As Integer, ByVal b As Integer) As Integer
Summ = a + b
End Function
В Project-References перечислены все ActiveX объекты на компьютере, там нужно добавить имя проекта DLL (например Project2).

Вот таким образом я всё сделал по инструкции из статей по работе с DLL, но не могу скомпилировать exe: пишет, что нужно скомпилировать сначала второй проект с DLL. Его компиляция (Make Summ.dll), а также (одновременная компиляция всей группы проектов) Make Project Group не дают результата - якобы он не скомпилирован, хотя это не так. Плюс при компиляции DLL выдает сообщение, что нельзя получить доступ к системному регистру (System Registry).
В чём может быть дело?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2013, 16:20
Ответы с готовыми решениями:

Создание ActiveX Dll в VB 6
Здравствуйте! У меня имеется .dll, .lib и .hpp файлы, библиотека используется управления контроллером. Хочу создать ActiveX враппер для...

Создание dll на основе Visual Basic
Помогите решить рабочую задачу: создание dll на основе visual basic. Требуется трехмерная модель с указанием переменных размеров. Размеры...

Создание DLL в VB, в которой хранятся формы.
Подскажите какие-нибудь ресурсы где можно почитать о создании DLL в VB, в которой хранятся формы.

103
238 / 49 / 6
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
04.08.2013, 00:00  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от The trick Посмотреть сообщение
псевдонимы
Что за псевдонимы?

У себя на сайте редактировать статью смогу и дальше, а вот здесь уже нет.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
04.08.2013, 00:13
Цитата Сообщение от Craw Посмотреть сообщение
Что за псевдонимы?
Те что Alias, вызов по ординалу
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
04.08.2013, 02:13
Цитата Сообщение от Craw Посмотреть сообщение
У себя на сайте редактировать статью смогу и дальше, а вот здесь уже нет.
Ну а я то зачем? P.S. Кстати, Вы по-моему тоже можете в течении суток (кнопка "ответить", потом появится кнопка "правка").

The trick, перегрузка именно с помощью алиасов...
В чем profit?
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
04.08.2013, 02:54
Цитата Сообщение от Dragokas Посмотреть сообщение
The trick, перегрузка именно с помощью алиасов...
Я написал "как бы перегрузка", и имел ввиду разный набор параметров для одной и той же функции.
Это удобно в плане типобезопасности, если функция принимает в качестве параметров разные типы, то можно сделать несколько вариантов функций для каждого случая, вместо того чтобы объявлять параметры как Any.
0
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 2
08.06.2019, 11:56
Добавлено через 4 минуты
Цитата Сообщение от Catstail
"Лучше всего делать процедурные dll на Power-Basic."

=======================================

Добрый день Catstail !

Возможно ли вызывать из VBA (Office 10) процедурные DLL созданные в Power-Basic ?

с уважением,
Роман
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
08.06.2019, 18:32
romawhite, добрый день! Насчет вызова процедурных DLL на PB из Офиса навскидку сказать ничего не могу. Надо пробовать. К сожалению, у меня PB сейчас нет под рукой, надо искать.
0
 Аватар для Argus19
1446 / 463 / 78
Регистрация: 24.09.2017
Сообщений: 2,542
Записей в блоге: 24
07.07.2019, 21:09
Где-то читал, что сначала идёт поиск .dll в System32.
Как подключить библиотеку, находящуюся в папке с программой для ускорения работы?
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,024
Записей в блоге: 7
07.07.2019, 21:53
Сначала идет поиск в папке с программой, а потом в других.
1
 Аватар для Argus19
1446 / 463 / 78
Регистрация: 24.09.2017
Сообщений: 2,542
Записей в блоге: 24
07.07.2019, 22:21
Цитата Сообщение от locm Посмотреть сообщение
Сначала идет поиск в папке с программой, а потом в других.
Спасибо.
0
 Аватар для Argus19
1446 / 463 / 78
Регистрация: 24.09.2017
Сообщений: 2,542
Записей в блоге: 24
29.08.2019, 08:44
Как ни странно, оказалось достаточно просто сделать библиотеку на С++ для использования её а программах на VB 6.0.
На пробу сделал библиотек округления до любого количества знаков после запятой. Логику взял из примеров в этой ветке.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "okrugl.h" 
 
 
double _stdcall okrug(double prom, int mn)
      {
       double prom1;
    prom = int(prom * 10* mn);
    prom1 = (int(prom / 10)) * 10;
    prom = prom - prom1;
    prom1 = prom1/10;
    if (prom > 5) prom1 = prom1 + 1;
    prom = prom1 / (1 * mn);
    return prom;
      }
Для её использования необходима декларация:
Visual Basic
1
2
Private Declare Function okrug Lib "okrugl.dll" _
                                   (ByVal Num As Double, ByVal mn As Integer) As Double
Вызов:
Visual Basic
1
переменная = okrug(округляемое число, до)
, где "до" :
10 - до десятых;
100 - до сотых;
1000 - до тысячных и т.д.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
29.08.2019, 17:07
Цитата Сообщение от Argus19 Посмотреть сообщение
Как ни странно, оказалось достаточно просто сделать библиотеку на С++ для использования её а программах на VB 6.0.
А что тут странного?
0
 Аватар для Argus19
1446 / 463 / 78
Регистрация: 24.09.2017
Сообщений: 2,542
Записей в блоге: 24
29.08.2019, 18:29
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А что тут странного?
казалось, что проще библиотеку написать на VB, благо такая функция есть. Но, если профессионалы говорят, что это хлопотно.......
"Александр Македонский конечной герой, зачем же стулья ломать?"
И С++ для простых функций не так у и сложен для понимания.
Когда я начинал изучать программирование, было сразу понятно, что математику удобно и просто писать на языке высокого уровня, а управление на ассемблере. правда, тогда он назывался "Мнемокод М-7000".
Ничего не изменилось. На VB сделать рабочее окно со всеми "прибамбасами" и математикой, а управление "железом" на С++.
Я прав?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
29.08.2019, 21:16
Цитата Сообщение от Argus19 Посмотреть сообщение
На VB сделать рабочее окно со всеми "прибамбасами" и математикой, а управление "железом" на С++.
Я прав?
Ну если есть такая необходимость, писать DLL именно на С++, то почему бы и нет?
DLL можно много на каких ЯП писать, потому и спросил, что странного в том, что их можно писать на C++? Это как раз очевидно.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,024
Записей в блоге: 7
29.08.2019, 21:44

Не по теме:

Цитата Сообщение от Argus19 Посмотреть сообщение
оказалось достаточно просто сделать библиотеку на С++ для использования её а программах на VB 6.0.
Напишите библиотеку с работой со строками. Будет сложнее.



Цитата Сообщение от Argus19 Посмотреть сообщение
а управление "железом" на С++.
Что-то не получилось сделать на VB?
На нем даже драйвер написать можно. https://www.cyberforum.ru/blog... g2930.html
0
63 / 48 / 12
Регистрация: 28.12.2014
Сообщений: 270
30.08.2019, 06:20
Цитата Сообщение от Argus19 Посмотреть сообщение
"прибамбасами" и математикой, а управление "железом" на С++
Без конкретики вопрос, на мой взгляд, не имеет смысла.
0
 Аватар для Argus19
1446 / 463 / 78
Регистрация: 24.09.2017
Сообщений: 2,542
Записей в блоге: 24
30.08.2019, 09:50
Цитата Сообщение от Pro_grammer Посмотреть сообщение
DLL можно много на каких ЯП писать, потому и спросил, что странного в том, что их можно писать на C++? Это как раз очевидно.
Для меня это было открытием. Я занимаюсь VB 6.0 бог знает с какого года, но он нужен был только для простенькой математики. Вникать "в абсолюте" не было необходимости.
Цитата Сообщение от locm Посмотреть сообщение
На нем даже драйвер написать можно
И быстродействие будет выше, чем на С++?
Цитата Сообщение от IDK Посмотреть сообщение
Без конкретики вопрос, на мой взгляд, не имеет смысла.
Сейчас у меня программа на VB 6.0 опрашивает приборы КИП через переходник RS-232 \ RS-485 по протоколу Modbus RTU и заносит результат в БД Access 2007. "Поднят" Openserver, на котором лежит сайт. Это оказалось удобно, т.к. у кровно заинтересованных потребителей разные ОС (Windows, Debian и что-то ешё линуксоидное). Стандартные контрол VB MsСomm - фактически посредник между программой и WIn32API и хорош для модема. Перехожу на использование Win32API. работает более надёжно, гораздо меньше ошибок.
Думаю, сделать .dll на С++ т.к. почему-то периодически сбивается программа. Есть подозрение из-за моего незнания, как сделать семафор для работы с БД. Программа пишет в БД, но при этом может происходить считывание её PHP скриптом для передачи клиенту, а т.е. клиентов более трёх, могут возникать коллизии. Просто постараться ускорить работу с приборами и повысить надёжность связи. Дополнение строки команды для управления прибором двумя байтами CRC16 на VB 6.0 долго и проверка истинности полученной информации от прибора, снабжённой так же CRC16, так же требует времени.
Как-то так.

Добавлено через 13 минут
Забыл. Адаптер производства "ОВЕН" АС3М он использует только Tx, Rx и землю. Остальные сигналы RS-232 должны игнорироваться. MSComm не работает с тайм-аутами и приходится включать таймер VB 6.0 на 500 мс, иначе - потеря данных.
При использовании Win32API можно сделать всё лучше, но пока не могу понять без анализа содержимого буфера, как определить, что функция завершилась штатно или выход из неё произведён по тайм-ауту. И тайм-аута достаточно на 10 мс.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,024
Записей в блоге: 7
31.08.2019, 09:43
Цитата Сообщение от Argus19 Посмотреть сообщение
И быстродействие будет выше, чем на С++?
С++ сферический и в вакууме?
Если говорить о быстродействии, многое зависит не от языка, а от компилятора и того как написан код. Вы же не написали ни какой используется компилятор C++, ни уровень оптимизации, не привели фрагмент кода на VB и C++ и т. д. О чем в таком случае можно говорить?

Цитата Сообщение от Argus19 Посмотреть сообщение
Думаю, сделать .dll на С++ т.к. почему-то периодически сбивается программа.
Если вы допустили ошибку в программе, C++ не поможет ее исправить. Скорее допустите другие ошибки которые еще сложнее будет найти.

Цитата Сообщение от Argus19 Посмотреть сообщение
Программа пишет в БД, но при этом может происходить считывание её PHP скриптом для передачи клиенту
Это задача БД, а не приложения.

Цитата Сообщение от Argus19 Посмотреть сообщение
Дополнение строки команды для управления прибором двумя байтами CRC16 на VB 6.0 долго и проверка истинности полученной информации от прибора, снабжённой так же CRC16, так же требует времени.
Вычисление CRC16 это простая задача и нужно сильно постараться чтобы вычисления производились долго.
В крайнем случае можно использовать табличный метод что сведет вычисления практически к нулю.

Я решил проверить сколько времени занимает вычисление CRC16. Создал массив размером 1000 байт и в цикле 1000 раз вычислил CRC16 (это соответствует потоку данных миллион байт). Это заняло примерно 0.05 секунды. По вашему медленно?
0
 Аватар для Argus19
1446 / 463 / 78
Регистрация: 24.09.2017
Сообщений: 2,542
Записей в блоге: 24
31.08.2019, 10:41
Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от The trick Посмотреть сообщение
Dll на ассемблере
Асм это не ЯВУ.
На ЯВУ сможете добиться того же размера без танцев в бубном?
Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от Craw Посмотреть сообщение
Так что получается, что можно в VB загрузить любую библиотеку динамически, кроме самого kernel32.
Не только kernel32. VB еще рантайм грузит, а тот в свою очередь, много чего еще загружает.
Просто хочется ускорить работу с СОМ-портом, чтобы не мешать серверу.
Понимаю, что во многом рассуждаю по дилетантски, понимаю, что можно и на ассемблере написать программу-"тормоз", занимающую объём памяти больше, чем программа на VB.
Пусть это будет моей личной блажью и интересом расширить познания в ЯП.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,024
Записей в блоге: 7
31.08.2019, 10:59
Цитата Сообщение от Argus19 Посмотреть сообщение
Просто хочется ускорить работу с СОМ-портом, чтобы не мешать серверу.
Не совсем понятно как порт мешает серверу. Скорость передачи данных, определяется настройками порта.

Не по теме:

Непонятно к чему процитировали 2 моих сообщения.

0
 Аватар для Argus19
1446 / 463 / 78
Регистрация: 24.09.2017
Сообщений: 2,542
Записей в блоге: 24
31.08.2019, 12:09
Я процитировал ваши сообщения, т.к. они, и сообщения других форумчан, привели к мысли, что весьма проблематично написать библиотеку на VB 6.0 для последующего её использования с программами на других ЯП. Именно сообщения в данной ветке форума и привело к мысли поработать с С++, т.к. получаются более универсальные, в смысле применения, .dll.
Цитата Сообщение от locm Посмотреть сообщение
Не совсем понятно как порт мешает серверу. Скорость передачи данных, определяется настройками порта.
Совершенно верно. Вопрос не в скорости самого порта, а во времени обработки, полученных от него данных.
У меня сейчас 9600 bps. Стандарт. И даже на такой скорости, при длине экранированной пары - 60 м, иногда идут ошибки чтения из-за мощных электромагнитных помех. Сбои бывают даже во время солнечных бурь. Это привело к расширению обработчика ошибок. А это время.
Возможно я не прав. Но, если работает только программа и сервер, Windows "живёт своей жизнью" не спрашивая моего разрешения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2019, 12:09

Создание процедурных DLL в Visual Basic (статья)
Создание процедурных DLL в Visual Basic Несколько слов о резонах создания процедурных Dll на VB. Как известно, VB позволяет без...

Visual Basic + VC++ DLL = ошибка Bad DLL calling convertation
Попытался я написать DLL-ку на VC++, для последующего использования ее в VB. Но поскольку я в VC++ чайник - он мне выдает ошибку Bad DLL...

Ошибка Can't find DLL entry point CryptEnumProvidersA in advapi32.dll
Проблема вот в чем. Объявляем CryptEnumProviderTypesA Private Declare Function CryptEnumProviders Lib 'advapi32.dll' Alias...

ntdll.dll и kernel32.dll - Реальные примеры работы на vb6
Копался, копался по стороннему форуму и наткнулся на всевозможные вызовы апифункций из недокументированной дллки ntdll.dll. Учитывая то,...

За какую функцию отвечают user32.dll,kernel32,winmm.dll
Помогите мне пожалуйста,разобратся с этими DLLками. Если есть где можно скачать матерьял,буду премного благодарен.


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru