Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
aleksmir

Как программу на VB разбить на модули?

24.01.2012, 00:59. Показов 2064. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может быть кто-нибудь сталкивался...

Имеется большой проект на VB. Его бы разбить на отдельные модули-кубики. Голову ломаю уже который год, а так ничего и не придумал.

Если использовать ActiveX Dll, возникают большие проблемы:
1) при изменении одного маленького модуля приходится перекомпилировать весь большой exe-проект;
2) если от этого модуля зависят ещё и другие библиотеки, тут вообще начинается кошмар - приходится перекомпилировать ещё и остальные зависящие модули тоже.

Статически подключаемые библиотеки VB5 создавать не умеет.
Что делать не знаю. А exe-ник и сам проект всё разрастается. При любом даже самом маленьком изменении приходится перекомпилировать ВСЁ. И это ВСЁ каждый раз приходится передавать заказчику через Интернет.

Неужели не придумано никаких механизмов, чтобы библиотеки не зависели от версий друг друга и сам EXE-ник тоже?
Или может быть существуют какие-то другие механизмы разбивки на модули?

Может быть кто-то знает что-то по этому поводу?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2012, 00:59
Ответы с готовыми решениями:

Как грамотно разбить программу на модули
Я начал замечать, что с определённого момента (обычно он наступает довольно быстро) мои программы превращаются в сплошные простыни...

Как разбить программу на отдельные модули в количестве 3 штук?
#include <iostream> using namespace std; int main() { int n; int i = 0; int s = 0; int z; cout << "Entered number...

Разбить программу на модули
Ребят, как программку вот єту разбить на модули? а то что то не пойму) uses Crt,Graph; const l=70;{„«Ё***} h=23;{‚лб®в*} ...

11
Comanche
24.01.2012, 09:40
Цитата Сообщение от aleksmir
при изменении одного маленького модуля приходится перекомпилировать весь большой exe-проект
Есть такая штука - "binary compatibility".
RTFM, как говорится

[bold]Она сохраняется, когда наряду с её включением в свойствах проекта ты... :[/bold]
- ...добавляешь (в ActiveX-проект) новые классы с Instancing = MultiUse или GlobalMultiUse (назову их [italic]общедоступными[/italic]),
- ...добавляешь в существующие [italic]общедоступные[/italic] классы новые [underline]публичные[/underline] (!) свойства и методы.

[bold]Она НЕ сохраняется, когда наряду с её включением в свойствах проекта ты... :[/bold]
- ...удаляешь (из ActiveX-проекта) [italic]общедоступные[/italic] классы,
- ...удаляешь из [italic]общедоступных[/italic] классов [underline]публичные[/underline] свойства и/или методы,
- ...изменяешь в [underline]публичных[/underline] свойствах и/или методах состав, порядок или тип аргументов, равно как и возвращаемых значений.

Допустим, ты скомпилил самую первую "stable version" ActiveX DLL-ки. Ставь в свойствах проекта "binary compatibility" на созданный тобой DLL-файл. И сохраняй проект. После этого, [bold]соблюдая вышеописанные ограничения[/bold], ты можешь компилить новые версии библиотеки и отсылать их заказчику, будучи уверенным, что у того ничего не рухнет. Если же ты нарушишь любое из ограничений, то бэйсик сам напишет тебе, что, мол, кранты бинарной совместимости. Ну и, разумеется, отослав такое заказчику, ты устроишь ему "сюрприз"

Это если вкратце...
Comanche
24.01.2012, 09:43
[underline]Примечание:[/underline] также почитай про "позднее связывание"... оно, конечно, не избавит тебя от проблем, если ты удалишь/модифицируешь публичный метод, который активно юзается в каком-то проекте, но всё-таки может оказаться полезным...
aleksmir
24.01.2012, 11:08
Comanche, большое спасибо за информацию про Binary Compatibility.
Теперь хотя бы буду знать - зачем в настройках нужна была эта опция и может быть смогу применить её на практике, если не получится идея, которая пришла мне сегодня в голову:

1) весь огромный exe-шник преобразовываю в огромный DLL;
2) exe-ником делаю новый маленький проектик, к которому будут прицеплены все остальные библиотеки ActiveX DLL, в том числе и огромный DLL;
3) exe-ник при запуске будет инициализировать каждую библиотеку и каждой передаст ссылки (типа Object) на другие библиотеки;
4) теперь при изменении одной библиотеки мне придётся перекомпилировать ТОЛЬКО маленький exe-ник и саму библиотеку!

Пока нашёл два минуса:
1) редактор VB не сможет предоставлять список процедур и функций при нажатии на точку после имени объекта, ссылающегося на библиотеку;
2) компилятор VB не сможет контролировать имена процедур, функций и их аргументов при создании DLL.
Но меня эти минусы пока не останавливают. Иногда приходится жертвовать чем-то меньшим ради чего-то более главного.

Ещё большое спасибо этому форуму! Всё-таки коллективный разум - великая вещь. Только задал вопрос в форум - в голову стали приходить идеи по решению заданного вопроса.
aleksmir
24.01.2012, 11:21
Кстати, насчёт Binary Compatibility идея тоже довольно не плохая.
Сейчас подумал...
Ограничение при изменении аргументов можно обойти, если старые функции не удалять, а добавлять новые функции с расширенным набором аргументов.
Comanche
24.01.2012, 11:22
Нет, тебе пришла в голову неважная идея. Не делай так.

То, что я тебе описАл, - подход, успешно используемый во многих приложениях, в том числе - и в сложных, коммерческих, "профессиональных" и т.п. И от этого никуда не уйти: раз уж ты пользуешься технологией COM (а вынося куски кода в ActiveX-компоненты ты именно ей и пользуешься!), то ты должен блюсти COM-интерфейсы, что применительно к бэйсику выливается в возню с "бинарной совместимостью" и соблюдение вышеописанных правил.

Насчёт "умной точки" в редакторе VB IDE. Распространённая практика - отлаживать проект в раннем связывании, пользуясь "умной точкой" и Броузером Объектов. А по завершении отладки - переходить на позднее, что сводится к не слишком сложным модификациям кода.
Comanche
24.01.2012, 11:23
Ты меня опередил. То, что я написАл, - относится к твоему ответу от 16.11.2005 10:31.
Comanche
24.01.2012, 11:24
Цитата Сообщение от aleksmir
Ограничение при изменении аргументов можно обойти, если старые функции не удалять, а добавлять новые функции с расширенным набором аргументов.
Главное тут - чувство меры )
aleksmir
24.01.2012, 11:45
Цитата Сообщение от Comanche
Нет, тебе пришла в голову неважная идея. Не делай так...
Хорошо, тогда первым попробую на практике твой вариант.
А то без "умной точки" и правда будет тяжко...
aleksmir
25.01.2012, 09:24
Цитата Сообщение от Comanche
Есть такая штука - "binary compatibility"...
Попробовал. Всё работает! Большое спасибо.
Comanche
25.01.2012, 09:35
Только вот поправлю сам себя:
Цитата Сообщение от Comanche
Она сохраняется, когда наряду с её включением в свойствах проекта ты... :
- ...добавляешь (в ActiveX-проект) новые классы с Instancing = MultiUse или GlobalMultiUse (назову их общедоступными),
- ...добавляешь в существующие общедоступные классы новые публичные (!) свойства и методы.
Вторым пунктом я хотел подчеркнуть, что она сохраняется, [bold]даже если добавляемые свойства и методы - [underline]публичные[/underline]![/bold] Т.е. если добавлять "приватные" - то, понятно дело, это никак не затронет "бинарную совместимость". Но можно и [underline]публичные[/underline] - всё равно ничего не отъедет. Вот что я хотел сказать.
aleksmir
25.01.2012, 14:38
Цитата Сообщение от Comanche
Вторым пунктом я хотел подчеркнуть, что она сохраняется, даже если добавляемые свойства и методы - публичные! Т.е. если добавлять "приватные" - то, понятно дело, это никак не затронет "бинарную совместимость". Но можно и публичные - всё равно ничего не отъедет. Вот что я хотел сказать.
Нет, до этого тоже было всё понятно написано. Я на это сразу рассчитывал, когда продумывал реализацию "бинарной совместимости".

Я уже применил "бинарную совместимость" к своему проекту. Всё отлично работает!
Новый заказ делаю уже в отдельном модуле. Очень удобно! Спасибо ещё раз!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2012, 14:38
Помогаю со студенческими работами здесь

Программу разбить на модули
Программу разбить на модули. Нужно создать 4-ре модуля – модуль с условным именем MyType, в котором объявляются глобальные типы и...

Разбить программу на модули
Не могу найти информацию по условной компиляции. Точнее кучу описаний деректив препроцессора С++ найти можно, но вот какого-то более...

Разбить программу на модули
Надо разбить программу на модули. Суть программа эта, сделана в виде функции. Вот общее начало: #include<iostream> ...

Разбить программу на модули
Имеется вот така прога. { Решение задачи должно содержать подпрограммы формирования исходного файла и вывода на экран содержимого...

Как разбить проект на модули?
Например есть приложение калькулятор, и если в него модуль то появятся ряд ф-ций ну там конверторы всякие, расчёты синусов, тангинсов,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru