Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
9-1110418223
parovoZZ
2005-03-10 04:30
2005.06.29
DirectDraw и ... Господа))


1-1118060645
Goga
2005-06-06 16:24
2005.06.29
Доступ к реестру из службы


5-1088249593
Виталя
2004-06-26 15:33
2005.06.29
Событие OnExit для наследника TEdit


4-1114963106
XCept.ion
2005-05-01 19:58
2005.06.29
Встраивание формы в таскбар


1-1118215582
Anonimus
2005-06-08 11:26
2005.06.29
Вызов функции из цикла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский