|
|
|
Создание модульной программы
|
|||
|---|---|---|---|
|
#18+
Интересен алгоритм данной работы. Нашел на эту тему следующее (Автор Беляев Данила [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. в зависимости от подключенных модулей, на форме опций, выводить опции этих модулей, самой программы и прочее... думаю знания то есть , не хватает у меня креатива родить идею =) Будут какие предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 21:30 |
|
||
|
Создание модульной программы
|
|||
|---|---|---|---|
|
#18+
1. MDI child нужно делать внутри основной проги и универсальную, в плагинах делать формы с BorderStyle = None, из основной программы получать их hwnd и делать родителем mdichild. Ты откроешь для себя много новых извращений на этом пути. =) Основной геморой - корректная загрузка/выгрузка обеих форм. Знаний тут как раз много не нужно, нужно много опыта и фантазии. По остальным вопросам конкретики быть не может. За тебя никто креативить не будет. Сначала определись, какие параметры ты хотел бы видеть, как они должны отображаться визуально. Потом придумай механизм получения списка этих параметров. Он должен быть одинаковым для всех плагинов, поэтому освежи свои знания по поводу интерфейсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 00:41 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=213&tid=2163163]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 376ms |

| 0 / 0 |
