Как передавать данные между модулями?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Umnik1
Сообщения: 15
Зарегистрирован: 16 ноя 2008, 21:14

20 дек 2008, 16:35

Как передавать данные между модулями? Допустим, у меня один *.cpp модуль связан с формой, а другой, в котором выполняются какие-нибудь расчеты - не связан. Как передать, например, какую-то переменную из одного модуля в другой?
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

20 дек 2008, 17:18

В классе, связанном с формой, определи функцию, возвращающую значение нужной переменной. Вызвав функцию, получишь нужное значение.
Umnik1
Сообщения: 15
Зарегистрирован: 16 ноя 2008, 21:14

20 дек 2008, 18:33

Спасибо,
А как в общем случае данные передавать? не через функцию, а если мне просто надо передать из одного модуля в другой? описать класс и использовать переменную-член класса? или я чето не понимаю?
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

20 дек 2008, 18:58

Если переменная объявлена как public, то можно и без функции, а если private, то без функции никак. В любом случае нужно иметь объект класса для доступа к его данным. То есть, если какой либо модуль получает данные из формы, то в этом модуле должен быть объявлен объект типа "форма".
Аватара пользователя
Airhand
Сообщения: 234
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

21 дек 2008, 12:53

Я так понял программа на C++ Builder. Тогда не обязательно определять класс. Можно обьявить глобальную переменную, а в другом модуле сделать её extern.
Вообще, существует много способов передачи. Например, можно передать через память. Надо определиться как удобнее.
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

03 фев 2009, 13:49

Проще всё. Объяви в передающем модуле extern переменную с теми же типом и имненем, как и переменная, в которую передаёшь и никаких гвоздей. extern будет вторым объявлением той-же переменной, что позволит разделять данные. Причём, можно сдалать и наоборот - читать внешние данные в модуле, имеющем extern объявление. А то, что ты написал, называется: "как купив билет на самолёт дойти пешком до пункта назначения?"! То есть компилятор, поддерживающий более простой вариант текста, ты уже купил. Так зачем же мучиться с функцией?
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

03 фев 2009, 21:20

Использование глобальных переменных и спецификатора extern - это классический вариант, но далеко не всегда самый лучший. Вообще злоупотребление глобальными переменными является признаком плохого стиля в программировании.
В связи с этим Windows позволяет обмениваться строками через системные переменные среды окружения. Это функции GetEnvironmentVariable(), SetEnvironmentVariable().
Это своего рода ассоциативный контейнер, предоставляемый системными функциями. Но что мешает использовать стандартные ассоциативные контейнеры С++ для обмена данными между программными модулями? Это несколько замедлит обращение к переменным из-за необходимости её поиска в контейнере, но зато не придётся создавать кучу глобальных переменных.
Можно даже обычный последовательный массив использовать, а константы индексов описать в перечислении (enum {...}).
Umnik1
Сообщения: 15
Зарегистрирован: 16 ноя 2008, 21:14

08 фев 2009, 21:46

спасибо, не знал про такое)
Гость

29 фев 2020, 20:24

Umnik1 писал(а): 20 дек 2008, 16:35 Как передавать данные между модулями? Допустим, у меня один *.cpp модуль связан с формой, а другой, в котором выполняются какие-нибудь расчеты - не связан. Как передать, например, какую-то переменную из одного модуля в другой?
Ответить