powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создание модульной программы
3 сообщений из 3, страница 1 из 1
Создание модульной программы
    #34903126
MaXyC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересен алгоритм данной работы.
Нашел на эту тему следующее (Автор Беляев Данила [outen{at}mail.ru], комментарии мои:) ):
создается новый EXE проект
Беляев Данила outen{at}mail.ru
Option Explicit
Private arrPlugins() As Object 'Массив для хранения dll модулей

Private Sub Form_Load()
On Error GoTo Handler
Dim strPlugin As String
strPlugin = Dir(Path & "Plugins\*.dll") 'Из папки plugins получаем все dll файлы (модули), которые мы скомпилируем чуть позже
While strPlugin <> ""
If Amount = -1 Then ReDim arrPlugins(0) Else ReDim Preserve arrPlugins(Amount + 1)
Set arrPlugins(Amount) = CreateObject(Left(strPlugin, Len(strPlugin) - 4) & ".Data")
lstPlugins.AddItem arrPlugins(Amount).Load
strPlugin = Dir()
Wend
Exit Sub
Handler:
'Если плагин не зарегистрирован в системе то регистрируем
If Err.Number = 429 Then modReg.Reg Path & "Plugins\" & strPlugin, True
Resume
End Sub


Беляев Данила outen{at}mail.ru
'Утилиты

Private Function Amount() As Long 'Подсчитываем колличество полученных плагинов
On Error GoTo Handler
Amount = UBound(arrPlugins)
Exit Function
Handler:
Amount = -1
End Function

Public Function Path() As String 'Расчитываем путь к программе. По мне так не актуальная функция
If Right(App.Path, 1) = "\" Then Path = App.Path Else Path = App.Path & "\"
End Function


Беляев Данила outen{at}mail.ru
Private Declare Function CreateThread Lib "kernel32" (anyThread As Any, ByVal lngSize As integer, ByVal lngStart As integer, ByVal lngValue As integer, ByVal lngFlags As integer, lngThread As integer) As integer
Private Declare Function LoadLibraryA Lib "kernel32" (ByVal strName As String) As integer
Private Declare Function GetProcAddress Lib "kernel32" (ByVal lngModule As integer, ByVal strName As String) As integer
Private Declare Function FreeLibrary Lib "kernel32" (ByVal lngModule As integer) As integer
Private Declare Function CloseHandle Lib "kernel32" (ByVal lngHandle As integer) As integer
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal lngHandle As integer, ByVal lngTime As integer) As integer

'Функция регистрации DLL плагина в системе
Public Function RegPlugin(ByVal strReg As String, ByVal lngLoad As integer) As integer
Reg = LoadLibraryA(strReg)
lngLoad = CreateThread(ByVal 0, 0, ByVal GetProcAddress(Reg, IIf(lngLoad, "DllRegisterServer", "DllUnregisterServer")), ByVal 0, 0, 0)
WaitForSingleObject lngLoad, 10000
CloseHandle lngLoad
FreeLibrary Reg
End Function


Это была основная программа, которая подключает модули. и затем вызывает необходимый для работы саб

DLL модуль, класс:
Беляев Данила outen{at}mail.ru
Public Function Load() As String
Load = "Заголовок плагина в окне основной программы"
End Function

Public Function Action(str As Object) As String
'Функция обработки. Этой функции передается управление из главной программы.
End Function


В данной работе получилось лишь только делать какие нибудь расчеты на основе переданных данных и возвращать результаты, получилось запускать формы, созданные в модуле, то есть сделать целую подпрограмму. с этим всё ясно.
тут возникли вопросы.
1. главная программа у меня имеет MDIForm, но вызывая плагин у меня не получилось сделать форму плагина MDIChild
2. хотелось бы сделать даже не просто подпрограмму, а допустим модуль календаря (записная книжка с календариком)
3. в зависимости от подключенных модулей, на форме опций, выводить опции этих модулей, самой программы и прочее...

думаю знания то есть , не хватает у меня креатива родить идею =)
Будут какие предложения?
...
Рейтинг: 0 / 0
Создание модульной программы
    #34903287
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. MDI child нужно делать внутри основной проги и универсальную, в плагинах делать формы с BorderStyle = None, из основной программы получать их hwnd и делать родителем mdichild. Ты откроешь для себя много новых извращений на этом пути. =) Основной геморой - корректная загрузка/выгрузка обеих форм.

Знаний тут как раз много не нужно, нужно много опыта и фантазии.
По остальным вопросам конкретики быть не может. За тебя никто креативить не будет.

Сначала определись, какие параметры ты хотел бы видеть, как они должны отображаться визуально. Потом придумай механизм получения списка этих параметров. Он должен быть одинаковым для всех плагинов, поэтому освежи свои знания по поводу интерфейсов.
...
Рейтинг: 0 / 0
Создание модульной программы
    #34907446
maxyc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо большое
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создание модульной программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]