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

Создание DLL

23.07.2013, 16:20. Показов 14076. Ответов 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
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
25.07.2013, 14:36
Студворк — интернет-сервис помощи студентам
В PowerBasic я оптимизацию не трогал. Просто взял - и скомпилировал. Не настаиваю, что PowerBasic порождает самый лаконичный код. А Ваш пример на каком Бэйсике?

Добавлено через 7 минут
А, увидел... Но тогда почему кто-то писал, что у PureBasic есть проблема в этом вопросе?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.07.2013, 15:19
Цитата Сообщение от Catstail Посмотреть сообщение
что у PureBasic есть проблема в этом вопросе?
Как раз наоборот. Проблема у VB6 в этом вопросе - та dll, которая была создана с помощью кода от SCINER больше ни где не работает, кроме как на самом VB6.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
25.07.2013, 16:48
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Как раз наоборот. Проблема у VB6
- каюсь... Не разобрался.
0
238 / 49 / 6
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
27.07.2013, 16:41  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
И что, на Delphi или C++ проще?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
library Project2; // название библиотеки
 
uses // используемые модули
  SysUtils,
  Classes;
 
{$R *.res} // команда подключить файл ресурсов
 
function Summ (a,b:real):real;stdcall; // сложение
begin
   result:=a+b;
end;
exports Summ; // экспорт в dll
 
begin // зачем это здесь? - не знаю
end.
Да в принципе на Делфи тоже не сложно DLL сделать.
Вот пример кода DLL - сложение двух чисел. Он больше, чем на PowerBasic по объёму. Но здесь мною написано лишь 5 строк - 9-13. Остальное компилятор сам вставляет.

А вот насчёт оптимизации - как её здесь делать, не знаю. Эта DLL весит 86 КБ.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.07.2013, 17:24
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от Craw Посмотреть сообщение
Эта DLL весит 86 КБ
К примеру Dll на ассемблере:
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   .386
   .model flat,stdcall
   option casemap:none
   .code
   DllEntry proc hInstDLL:DWORD, reason:DWORD, reserved1:DWORD       ; Точка входа
           mov  eax,-1
           ret
   DllEntry Endp
 
   Summ proc USES edi esi Op1:DWORD, Op2:DWORD         ; Процедура сложения чисел
        mov eax,Op1
        add eax,Op2
        ret
   Summ endp
 
   End DllEntry


656 байт.
Вложения
Тип файла: rar DllAsm.rar (1.3 Кб, 10 просмотров)
1
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.07.2013, 17:32
Для вещественных:
Assembler
1
2
3
4
5
6
  Summ proc USES edi esi Op1:DWORD, Op2:DWORD         ; Процедура сложения чисел
        FINIT
        FLD dword ptr [Op1]
        FADD dword ptr [Op2]
        ret
   Summ endp
1
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
27.07.2013, 18:20
Цитата Сообщение от The trick Посмотреть сообщение
Dll на ассемблере
Асм это не ЯВУ.
На ЯВУ сможете добиться того же размера без танцев в бубном?

У мня получилось из этого кода:
Code
1
2
3
ProcedureDLL Summ(a, b)
  ProcedureReturn a + b
EndProcedure
создать dll, с размером файла - 768 байт.
Вложения
Тип файла: zip Test_dll.zip (488 байт, 11 просмотров)
1
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.07.2013, 18:33
Цитата Сообщение от locm Посмотреть сообщение
Асм это не ЯВУ.
На ЯВУ сможете добиться того же размера без танцев в бубном?
создать dll, с размером файла - 768 байт.
Что-то не работает Ваша Dll в VB.
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
27.07.2013, 18:36
Цитата Сообщение от The trick Посмотреть сообщение
не работает
Появляется сообщение об ошибке или что?
В PB она нормально работает.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.07.2013, 18:41
Цитата Сообщение от locm Посмотреть сообщение
Появляется сообщение об ошибке или что?
Файл не найден. У меня такое появлялось когда в опциях линкера FILEALIGN < 512
Миниатюры
Создание DLL  
0
238 / 49 / 6
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
27.07.2013, 18:42  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Что-то не работает Ваша Dll в VB.
Не знаю как на VB будет, но у меня на Delphi она отлично работает!

Только что это за язык такой? В нём процедура и функция одно и тоже видимо!
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
27.07.2013, 19:04
Цитата Сообщение от The trick Посмотреть сообщение
У меня такое появлялось когда в опциях линкера FILEALIGN < 512
Похоже что это заморочка VB. В других ЯП проблем нет (проверил на XP и 7 при динамической и статической загрузке DLL). Линкеру VB должно быть все равно на размер выравнивания секций DLL. Это не его забота, а загрузчика DLL винды.

Цитата Сообщение от Craw Посмотреть сообщение
Только что это за язык такой?
Это PureBasic.

Разница между процедурой и функцией лишь в том, что первая не возвращает результат. Если в процедуре нет оператора ProcedureReturn, то она работает как процедура, а если есть, то как функция.
0
238 / 49 / 6
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
27.07.2013, 19:34  [ТС]
По Delphi специально поискал, как можно оптимизировать DLL на нём. Ведь, как я писал раньше, без оптимизации его объем 85 КБ.
В итоге у меня получилось минимум 14 КБ. Меньше никак.

Так что в плане экономии памяти DLL на PowerBasic лучше чем на Delphi.

Добавлено через 8 минут
Ещё есть вопрос по DLL.
У нас во всех примерах на VB здесь статическая загрузка DLL, т.е. при ней DLL выгружается из памяти при окончании работы программы. Это не экономно, т.е. если мы один раз использовали функцию из DLL и больше она нам не нужна, то она всё равно находится в памяти, готовая к использованию. Есть ещё динамическая загрузка, когда её можно выгрузить из памяти в любой момент, если она больше не используется.
Интересует, как это сделать.
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
27.07.2013, 19:43
Цитата Сообщение от Craw Посмотреть сообщение
Интересует, как это сделать.
Используй WinAPI функции: LoadLibrary, GetProcAddress и FreeLibrary.
1
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.07.2013, 19:45
Цитата Сообщение от locm Посмотреть сообщение
Похоже что это заморочка VB.
Можно сказать так, VB импортирует функции посредством LoadLibrary и GetProcAddress. Для данной DLL LoadLibrary возвращает 0, поэтому не вызывается.
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
27.07.2013, 19:56
Цитата Сообщение от The trick Посмотреть сообщение
Для данной DLL LoadLibrary возвращает 0
Почему же у меня эта функция загружает библиотеку (возвращает не 0)?
Путь к файлу был правильно указан?
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.07.2013, 20:06
Цитата Сообщение от locm Посмотреть сообщение
Путь к файлу был правильно указан?
Да, попытаюсь разобраться. Возможно DLL на PB использует какие-нибудь библиотеки? Сейчас посмотрю через Dependency Walker
Миниатюры
Создание DLL  
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
27.07.2013, 20:22
Цитата Сообщение от The trick Посмотреть сообщение
Возможно DLL на PB использует какие-нибудь библиотеки?
Только MSVCRT.dll и Kernel32.dll. Они присутствуют в винде начиная с Win98.

У меня загружает (см. скрин). У вас случайно на x64 система?

Можете мне скинуть скомпилированную VB-прогу, которая загружает dll из корня диска C: (т. е. "C:\Test.dll")? Тогда узнаем в чем дело, в VB или в компе.
Миниатюры
Создание DLL  
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
27.07.2013, 20:34
Цитата Сообщение от locm Посмотреть сообщение
У вас случайно на x64 система?
Нет.
Скомпилировал, Dll загружается нормально, в IDE нехочет.
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
27.07.2013, 20:36
То есть не загружается только при запуске в IDE?
А если запустить в IDE с отключенным отладчиком? Может в нем проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.07.2013, 20:36

Создание процедурных 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ками. Если есть где можно скачать матерьял,буду премного благодарен.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru