Модератор
|
||||||
1 | ||||||
Создание процедурных DLL в Visual Basic (статья)25.08.2013, 22:19. Показов 45074. Ответов 74
Метки нет (Все метки)
Создание процедурных DLL в Visual Basic Несколько слов о резонах создания процедурных Dll на VB. Как известно, VB позволяет без проблем создавать ActiveX-Dll. Эта возможность в целом решает проблему повторного использования кода. Однако, есть два момента, которые могут сделать использование ActiveX-Dll (т.е. COM) не вполне удобным. Первая проблема состоит в том, что ActiveX-Dll нельзя просто скопировать - нужна регистрация (т.е. административные права). А при повсеместном внедрении политик безопасности, получение прав администратора вырастает в большую проблему. Использование процедурных dll не требует регистрации. Вторая проблема состоит в том, что интенсивное использование кода из ActiveX-Dll (даже при раннем связывании) все-таки медленнее, чем использование кода из своей программы (или из процедурной dll) - ведь соблюдение стандарта COM требует ресурсов... И особенно больших, если используется ActiveX-Exe. Все это делает создание процедурных dll на VB достаточно актуальным. Теперь к делу! Интересующиеся деталями могут прочитать мой перевод статьи "Создание процедурных DLL в Visual Basic". А для "занятых" могу сказать следующее: 1) Скопируйте и разверните прилагаемый архив с примерами 2) из поддиректории link-2 возьмите модуль linkk.exe; перенесите его в установочную директорию VB (она обычно располагается по адресу \Program Files\Microsoft Visual Studio\Vb98); модуль LINK.EXE переименуйте в LINKLNK.EXE, а модуль linkk.exe -> LINK.EXE 3) Для создание dll действуйте так: - создавайте проект ActiveX-DLL (и назовите myLib) - модуль класса не трогайте - добавьте в проект стандартный модуль и занесите в него следующее:
NAME myLib LIBRARY MathMod DESCRIPTION "... ..." EXPORTS DllMain @1 Increment @2 Decrement @3 Square @4 getLastError @5 ClearError @6 - транслируйте проект обычным образом в среде IDE - получится процедурная DLL! Для проверки работспособности DLL можно написать отдельный тестирующий модуль, в котором написать нужные операторы Declare для использования наших функций. Все, разложенные по директориям, исходники прилагаются:
14
|
25.08.2013, 22:19 | |
Ответы с готовыми решениями:
74
Работа с DLL в Visual Basic (статья) Создание dll на основе Visual Basic Способы передачи данных с Visual Basic в Excel (статья) Visual Basic + VC++ DLL = ошибка Bad DLL calling convertation |
06.02.2014, 23:56 | 41 |
DLL заработала. Теперь хотелось бы увидеть подробную инструкцию по созданию DLL в VB.
А чтобы она не потерялась, лучше ее разместить в этой теме. Создание процедурных DLL в Visual Basic (статья)
0
|
Модератор
|
|
07.02.2014, 00:20 | 42 |
Я писал уже несколькими постами ранее почему падают DLL написанные на VB6 в других ЯП. И давал ссылки (ссылки удалили, но они очень просто гуглятся), где объясняется как сделать так чтобы работало.
1
|
Заблокирован
|
|
07.02.2014, 07:11 | 43 |
тема очень интересная, Создание процедурных DLL в Visual Basic (статья)
жаль в этой статье об этом не говорилось, хорошо что у меня гугл есть )
0
|
07.02.2014, 08:13 | 44 |
В ходе рабочих дебатов в ветке для начинающих был всё же достигнут положительный результат. Вернее этот метод уже давно используется, и в большей степени положительно, а точнее с 2007 г.
Описан и разработан кем то под ником Хакер. В виду запрета ссылок на оригинальную статью - она на другом форуме, привожу только полное название : [FireNativeDLL] Создание полноценных DLL на Visual Basic Кто хочет, тот найдет. Там проект создания DLL с одной функцией сложения целых чисел + FireNativeDLL 1.0 - это средство, которое добавит в VB возможность создавать обычные DLL + программа проверки работы DLL, написанная на PureBasic, Всё проверял на winXP, а посему в других современных ОС возможны траблы, прошу протестить. P.S. После установки FireNativeDLL 1.0 ни чего не сломается - как и раньше можно работать с обычными проектами.
2
|
07.02.2014, 08:14 | 45 |
Уважаемый The trick видимо не хочет тут описывать процесс создания DLL потому, что всё не так просто, и без костылей этот процесс не обходится.
Во одной предлагается открыть vbp-файл блокнотом и добавить туда ключи экспорта наших функций. Этот способ был бы идеальным, но как там же и оговаривается никакой «инициализации рантайма» нет, а значит такая Dll бесполезна в плане общего применения. В другой ссылке предлагается скачать FireNativeDLL 1.0 - это средство, которое добавит в VB возможность создавать обычные DLL (т.н. в народе NativeDLL). Но тоже не всё гладко в плане работы. У кого с 7-кой не работает, у кого работает, но 1 раз и т.п. мелочи. Вроде бы да, на Vb6 можно как то написать DLL, но гарантий правильной работы ни кто не даст. Добавлено через 55 минут Всё получилось, проект и все необходимые для этого файлы тут Создание процедурных DLL в Visual Basic (статья)
0
|
Заблокирован
|
|
07.02.2014, 09:08 | 46 |
я в той теме вас поблагодарил, а вот интересно The trick этими костылями пользовался ?
у него кстате win-семёрка
0
|
Модератор
|
|
07.02.2014, 11:12 | 47 |
Все очень просто, просто надо немного знать как работает VB6, в моих примерах никакой инициализации рантайма не было (она там и не нужна была), но это не мешало мне создать окно и контролы на нем. Как раз в плане общего пользования такая длл более чем достаточна (она поддерживает многопоточность, в ней можно вызывать любые API и многое другое), я написал кучу программ где не используется потокозависимые функции рантайма. Ты просил нормально работающую DLL, я ее сделал и выложил тебе (даже 2 штуки), ты убедился что они работают, даже спасибо не сказал. Тогда с чего мне доказывать кому-то что-то, что я знаю на 100% что это работает? Я бы мог просто написать - на VB6 можно делать полноценные DLL и все, и не тратить свое время, т.к. у меня его и так мало. Уж если на VB можно делать внедрение, самомодифицирующийся код, перехватывать АПИ, почему он не может создавать DLL?
2
|
07.02.2014, 13:09 | 48 |
Спасибо, конечно. Но что стОят 2 штуки ( да хоть 5 штук) готовых DLL без описания того, как их сделать?
Я так и не понял, каким образом сделаны твои DLL? Но точно не так, каким сделана моя. У меня в DLL только 1 функция - VBSum. А в твоих образцах есть куча дополнительных DllCanUnloadNow() DllGetClassObject() DllRegisterServer() DllUnregisterServer() Нужны ли они? При чем в одном случае они без параметров, в другом случае с 2-мя параметрами. Хотелось бы ясности в этом вопросе!
0
|
Модератор
|
|
07.02.2014, 13:30 | 49 |
Я эти DLL делал из ActiveX Dll, поэтому в ней содержатся эти функции (ее можно подключить через референсы), но мне ни чего не стоит сделать это любым другим способом (подменой линкера, FNDLL и т.п.), и у меня этих функций не будет, и будет также все работать, т.к. я писал что нет разницы каким способом создана DLL. Изначально вопрос не стоял в ограничении на экспортируемые функции, а всего лишь ты попросил работающую DLL
Я делал пропиской ключей линкера LinkSwitches экспортируемых функций.
Это функции нужны для работы COM
1
|
Заблокирован
|
|
11.02.2014, 05:53 | 50 |
И всётаки...., товарищи, покажите пример
1) отдельный проект где созданно 1 или 2 функции, подготовленный для компиляции в DLL + коментарии на русском 2) другой проект написанный на VB6 (VBA) который использует эту(эти) функции + коментарии на русском Как это правильно сделать? Расскажите в этой теме. Хотя-бы мне обычному землянину, имеющего среднее образование и знающего только синтаксис VB6(VBA) я очень хочу это понять дело в том, что у меня накопилось множество DLL-ок, с исходниками и зачастую приходиться подключать их к своим приложениям через референс а хотелось бы пользовать только несколько отдельных функций Добавлено через 11 минут а главное, хотелось бы отправить клиенту посылку со своим приложением у которого есть рантайм msvbvm60.dll посылку, где будет папка с DLL-ками и EXE-Файл , который будет сразу-же работать
0
|
11.02.2014, 07:48 | 51 |
Прочитай самый первый пост этой темы. Если надо работать с DLL только из VB6, то проблем нет вообще. Там и пример есть.
Все копии ломают исключительно из желания работать с DLL написанными в VB6 на других ЯП. Повторюсь, что ввиду запрета ссылок на оригинальную статью - она на другом форуме, привожу только полное название : [FireNativeDLL] Создание полноценных DLL на Visual Basic ( первая строка Гугла) Там есть инсталлятор на 3-й странице конференции ( нужна регистрация). После установки появится шаблон в VB6, куда надо вписать свои функции, скомпилировать обычный способом и наслаждаться полученной DLL.
1
|
Заблокирован
|
|
11.02.2014, 08:39 | 52 |
Ну хорошо, спасибо, Native VB DLL.zip вы сдесь уже выкладывали ...
сейчас к себе копирую, все страницы, из найденной дополнительной информации буду разбираться ... Добавлено через 26 минут а шаблон Standard DLL.vbp я не сразу у себя обнаружил, после установки пришлось вскрыть архив SFX чтоб подсмотреть что туда установилось )
0
|
Модератор
|
|
11.10.2014, 23:18 | 53 |
2
|
Заблокирован
|
|
12.10.2014, 01:07 | 54 |
Я редко заглядываю на сайт *Конференция VBStreets*
Зато теперь понятно как сделать нативную DLL (без примочек) Откройте блокнотом проектный файл (vbp) и обратите внимание на новый ключ внизу ([VBCompiler]), и как экспортируются функции из DLL Кликните здесь для просмотра всего текста
Type=OleDll
Module=Module1; Module1.bas Class=Class1; Class1.cls Startup="(None)" HelpFile="" ExeName32="1.dll" Command32="" Name="Vb1" HelpContextID="0" CompatibleMode="1" MajorVer=1 MinorVer=0 RevisionVer=0 AutoIncrementVer=0 ServerSupportFiles=0 CompilationType=0 OptimizationType=0 FavorPentiumPro(tm)=0 CodeViewDebugInfo=0 NoAliasing=0 BoundsCheck=0 OverflowCheck=0 FlPointCheck=0 FDIVCheck=0 UnroundedFP=0 StartMode=1 Unattended=0 Retained=0 ThreadPerObject=0 MaxNumberOfThreads=1 [VBCompiler] LinkSwitches=-export:Foo -export:Bar -export:VBStreetsRules Картинка:
0
|
Заблокирован
|
|
12.10.2014, 01:18 | 56 |
Где?..
Может-быть и было, повторение мать учения, тем-более я так красиво оформил пост что любой начинающий смогёт собрать *полноценную* длл-ку ))
0
|
Модератор
|
|
12.10.2014, 15:08 | 57 |
Вообще-то я 2 раза описал это метод.
Это ты хотел кавычки поставить вместо звездочек, тогда правильно. Эти DLL далеко неполноценные, нужно читать сначала информацию, которую копируешь сюда. Добавлено через 13 часов 47 минут Многопоточность в VB6 часть 3 - внедрение в чужой процесс. Пример DLL, написанной на VB6, с внедрением ею в чужие процессы.
2
|
Модератор
|
|
17.02.2015, 01:08 | 58 |
Многопоточность на VB6 часть 4 - многопоточность в Standart EXE.
Многопоточность в стандартном EXE.
3
|
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 2
|
|
24.11.2015, 08:56 | 59 |
Всем доброго времени суток! Позвольте задать небольшой вопрос? Пример dll из шапки отлично работает в проверочном модуле, запущенном в VB6, также справляется в VBA6.5 в Excel и в VBA7.1(x32) в AutoCAD, но в VBA7.1(x64) в AutoCAD выдает ошибку 48. Возможно это связано с необходимостью вызывать функции в виде: Private Declare PtrSafe Function? И можно ли как-то исправить сей момент? Заранее спасибо!
0
|
Модератор
|
|
24.11.2015, 13:41 | 60 |
Нельзя использовать 32-разрядные dll в 64 разрядных приложениях (можно обойти, но это дорого будет стоить)
2
|
24.11.2015, 13:41 | |
24.11.2015, 13:41 | |
Помогаю со студенческими работами здесь
60
Использование библиотеки dll написанной в Visual Basic Можно ли в Visual Basic использовать стандартные Windows DLL? Visual Basic 6 DLL для работы с php файлами Visual Basic вылетает с ошибкой при попытке вызова функции из DLL проблема с использованием функции в проекте Visual Basic, вызываемой из DLL написаной на Delphi5 Вычисление значений функции двух переменных в Visual Basic - Visual Basic Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |