Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизВзаимодействие приложения и нескольких dll Найти похожие ветки
← →
Хочу все знать (2005-06-03 10:22) [0]Добрый день!
Имеется достаточно большое приложение, которое нужно разбить на приложение и несколько библиотек. Т.е. должно получится a.exe+b.dll+c.dll+d.dll.
В этой связке a.exe использует функциональность из всех библиотек, но и c.dll+d.dll использует функции из b.dll. Причем в некотоорых функциях должны использоваться данные, которые выбираются пользователем в a.exe
Т.е. вопрос в том что лучше:
1. организовать каким-то образом доступ всех библиотек к глобальным переменным, которые инициализируются в приложении
2. передавать эти переменные как параметры во все используемые библиотеки
← →
Sergey Masloff (2005-06-03 10:26) [1]Можно вопрос - а зачем? Если эти библиотеки будет использовать только это приложение никакой особой выгоды от разбития не будет кроме сложностей взаимодействия.
Если все же хочется то я бы разбил на COM компонентны и взаимодействовал бы штатными средствами COM а не выдумывал велосипедов с квадратными колесами...
← →
Digitman © (2005-06-03 10:27) [2]
> нужно разбить на приложение и несколько библиотек
сначала объясни смысл этого ..
какую цель ты преследуешь, "разбивая" проект на несколько автономных ?
первое и главное назначение динамически линкуемых модулей - их совместное использование многими различными приложениями, как одного и того же производителя, так и совершенно разных производителей
← →
Хочу все знать (2005-06-03 10:35) [3]Прошу прощение - не уточнил сразу...
Причин несколько:
1. Функциональность, вынесенная в библиотеки, будет использоваться и другими приложениями
2. Приложения будут распространятся в разной комплектности, т.е. с разным набором библиотек
← →
Sergey Masloff (2005-06-03 10:37) [4]Мое ИМХО не изменилось - набор COM-классов будет самым простым решением.
← →
Digitman © (2005-06-03 11:10) [5]
> Хочу все знать (03.06.05 10:35) [3]
понятно.
теперь резон очевиден.
наиболее простым и универсальным, imho, будет способ передачи параметров по ссылке ... параметром же м.б. что угодно, в т.ч. и глоб.переменная ... поскольку при передаче параметра по ссылке передается не само значение параметра, а адрес его местонахождения в памяти вызывающего ДЛЛ модуля, ДЛЛ-модуль получает прямой доступ к той же, например, глоб.переменной, т.е. сможет как считывать значение переменной, так и (если это необходимо) устанавливать его
← →
Хочу все знать (2005-06-03 12:45) [6]Вот я и не могу понять как наиболее просто сообщить всем подключенным библиотекам текущее значение какой-либо переменной.
Попробую объяснить свою мысль:
В приложении инициализируется и периодически изменяется некая переменная - назовем ее А. В b.dll имеется функция ААА, которая получает в качестве параметра нашу переменную А. В c.dll есть процедура BBB, которая обращается к функции ААА, и есно должна передать ей в качестве параметра переменную А. Но непосредственной необходимости знать ее значение функциям и процедурам из b.dll нету - значения А необходимо только для вызова функции ААА.
Если бы функции из библиотек вызывались бы только из приложения, можно бы было при старте вызывать для каждой используемой dll, некую функцию инициализации и передавать все нужные переменные в юиблиотеки. Но ведь тут библиотеки будут взаимодействовать между собой напрямую и как быть в этом случае что-то никак не соображу.
← →
Digitman © (2005-06-03 12:58) [7]
> Хочу все знать (03.06.05 12:45) [6]
> непосредственной необходимости знать ее значение функциям
> и процедурам из b.dll нету - значения А необходимо только
> для вызова функции ААА
ну как же нет, когда она очевидна ?
так или иначе, чтобы С могла вызывать b.ААА, С должна иметь необходимый параметр ... а его С может получить либо из a.exe непосредственно либо из любой библиотеки, к которой a.exe уже обращался, передав этот нужный для вызова b.ААА параметр
← →
Хочу все знать (2005-06-03 13:19) [8]так, хоть что-то начинает прояснятся:)
Другими словами, если при старте приложения я передам в b.dll значение переменной А, то впоследствии при вызове b.AAA из c.dll теоретически можно и не указывать значение переменной - в b.dll к этому времени оно уже будет известно?
← →
Digitman © (2005-06-03 13:21) [9]
> к этому времени оно уже будет известно?
ну раз ты его уже передал, то конечно известно !
← →
Хочу все знать (2005-06-03 14:44) [10]2Digitman
сенкс
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c