Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Взаимодействие приложения и нескольких 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1117867566
seregka
2005-06-04 10:46
2005.06.29
как очистить буфер обмена


8-1109817542
dr_sollo
2005-03-03 05:39
2005.06.29
Как изменить размер картинки в DSPack


1-1117706901
Serg1981
2005-06-02 14:08
2005.06.29
Динамическое создание формы


1-1117703726
Phoenix9000
2005-06-02 13:15
2005.06.29
запуск процедуры в определенное время


1-1117524040
BKV
2005-05-31 11:20
2005.06.29
Приложение в сервис.