Модератор
|
||||||
1 | ||||||
Создание процедурных DLL в Visual Basic (статья)25.08.2013, 22:19. Показов 45071. Ответов 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, 17:31 | 21 |
На VB6 можно делать полноценные DLL - стандартными средствами
На VB6 можно делать обычные DLL из ActiveX, т.к. это частный случай NativeDLL - А падают DLL исключительно из-за того что никто не производит инициализацию рантайма.
0
|
Модератор
|
||||||
06.02.2014, 19:44 | 22 | |||||
Что про эти? Я писал что Dll падают т.к. рантайм неинициализирован. Неважно каким способом DLL создана.
Там есть описание приемов с помощью которого можно создать DLL. FNDLL - сам инициализирует рантайм.
Dll сделал из моего примера о многопоточности (тот же код) только вызываеться из DLL, остальное все тоже самое. Вызов из C++
0
|
06.02.2014, 21:38 | 23 | |||||
И что должно случится после вызова? Или к ней надо ещё кучу кода написать?
А можно сделать dll из простого примера
0
|
Заблокирован
|
|
06.02.2014, 21:43 | 24 |
Он вам и показал что на C++ запустил эту DLL
у меня нет C++ к сожалению проверить не могу ...
0
|
Модератор
|
|
06.02.2014, 21:45 | 25 |
В этой DLL создается окно и на нем можно рисовать, я же написал
Вызывай просто как обычную API, декларацию я дал. Первый параметр hInstance, второй указатель на любую непустую строку (это имя класса для нового окна, мне было лень переделывать TLB и т.п. поэтому я неизменно вставил ввод строки). Также я не делал внутри вызов InitCommonControlsEx, так что это должен делать вызывающий код (если вызывающий код до этого ее не вызывал, наприме до создания окна).
0
|
Заблокирован
|
|
06.02.2014, 22:01 | 26 |
даже я, и то запутался
0
|
06.02.2014, 22:03 | 27 | |||||
Вызывать не обязательно из C++.
Можно из другого ЯП. Программа виснет в этой функции и больше ничего не происходит. Не работает.
0
|
06.02.2014, 22:25 | 29 |
У меня тоже повисла. Я и с прототипами пытался и так. И строку передавал и указатель на строку.
The trick, так как с простой функцией? Если всё возможно и так просто, то сделай, тогда уж и посмотрим.
0
|
06.02.2014, 22:27 | 30 | |||||
Не работает.
0
|
Заблокирован
|
|
06.02.2014, 22:27 | 31 |
0
|
Модератор
|
||||||
06.02.2014, 22:32 | 32 | |||||
Каким образом задекларирована функция? Скинь exe, я в отладчике гляну, только DLL пропиши в папке.
Ок, пару моментов
Тоже скинь мне exe я его в отладчике гляну в чем проблема. Нет, об этом
0
|
Заблокирован
|
|
06.02.2014, 22:33 | 33 |
The trick, Вам нужно было пример запуска на PB продемонстрировать
но вы наверное его не знаете )
0
|
06.02.2014, 22:38 | 34 | |||||
0
|
Модератор
|
|||||||||||
06.02.2014, 23:01 | 36 | ||||||||||
Вот DLL которая импортирует функцию VBSum
Вот код вызова на C++
1
|
Заблокирован
|
||||||
06.02.2014, 23:36 | 38 | |||||
Не по теме: Наверняка она у него есть ) Добавлено через 2 минуты я так думаю он скомпелировал только эти строчки на VB
0
|
Модератор
|
|
06.02.2014, 23:44 | 40 |
Смотрел код Iocm'а и увидел что там статично передаеться имя класса "TrickWindow" в CreateWindow, а Iocm передавал "Test", так что если вы вторым параметром передадите "TrickWindow", то у вас все запустится. Так что извиняюсь, невнимательно код просмотрел. Вот нормальная версия первой Dll и вторая Dll
1
|
06.02.2014, 23:44 | |
06.02.2014, 23:44 | |
Помогаю со студенческими работами здесь
40
Использование библиотеки dll написанной в Visual Basic Можно ли в Visual Basic использовать стандартные Windows DLL? Visual Basic 6 DLL для работы с php файлами Visual Basic вылетает с ошибкой при попытке вызова функции из DLL проблема с использованием функции в проекте Visual Basic, вызываемой из DLL написаной на Delphi5 Вычисление значений функции двух переменных в Visual Basic - Visual Basic Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |