Как передавать данные между модулями?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Как передавать данные между модулями? Допустим, у меня один *.cpp модуль связан с формой, а другой, в котором выполняются какие-нибудь расчеты - не связан. Как передать, например, какую-то переменную из одного модуля в другой?
В классе, связанном с формой, определи функцию, возвращающую значение нужной переменной. Вызвав функцию, получишь нужное значение.
Спасибо,
А как в общем случае данные передавать? не через функцию, а если мне просто надо передать из одного модуля в другой? описать класс и использовать переменную-член класса? или я чето не понимаю?
А как в общем случае данные передавать? не через функцию, а если мне просто надо передать из одного модуля в другой? описать класс и использовать переменную-член класса? или я чето не понимаю?
Если переменная объявлена как public, то можно и без функции, а если private, то без функции никак. В любом случае нужно иметь объект класса для доступа к его данным. То есть, если какой либо модуль получает данные из формы, то в этом модуле должен быть объявлен объект типа "форма".
Я так понял программа на C++ Builder. Тогда не обязательно определять класс. Можно обьявить глобальную переменную, а в другом модуле сделать её extern.
Вообще, существует много способов передачи. Например, можно передать через память. Надо определиться как удобнее.
Вообще, существует много способов передачи. Например, можно передать через память. Надо определиться как удобнее.
Проще всё. Объяви в передающем модуле extern переменную с теми же типом и имненем, как и переменная, в которую передаёшь и никаких гвоздей. extern будет вторым объявлением той-же переменной, что позволит разделять данные. Причём, можно сдалать и наоборот - читать внешние данные в модуле, имеющем extern объявление. А то, что ты написал, называется: "как купив билет на самолёт дойти пешком до пункта назначения?"! То есть компилятор, поддерживающий более простой вариант текста, ты уже купил. Так зачем же мучиться с функцией?
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Использование глобальных переменных и спецификатора extern - это классический вариант, но далеко не всегда самый лучший. Вообще злоупотребление глобальными переменными является признаком плохого стиля в программировании.
В связи с этим Windows позволяет обмениваться строками через системные переменные среды окружения. Это функции GetEnvironmentVariable(), SetEnvironmentVariable().
Это своего рода ассоциативный контейнер, предоставляемый системными функциями. Но что мешает использовать стандартные ассоциативные контейнеры С++ для обмена данными между программными модулями? Это несколько замедлит обращение к переменным из-за необходимости её поиска в контейнере, но зато не придётся создавать кучу глобальных переменных.
Можно даже обычный последовательный массив использовать, а константы индексов описать в перечислении (enum {...}).
В связи с этим Windows позволяет обмениваться строками через системные переменные среды окружения. Это функции GetEnvironmentVariable(), SetEnvironmentVariable().
Это своего рода ассоциативный контейнер, предоставляемый системными функциями. Но что мешает использовать стандартные ассоциативные контейнеры С++ для обмена данными между программными модулями? Это несколько замедлит обращение к переменным из-за необходимости её поиска в контейнере, но зато не придётся создавать кучу глобальных переменных.
Можно даже обычный последовательный массив использовать, а константы индексов описать в перечислении (enum {...}).
спасибо, не знал про такое)