быдлокодер
![]() 1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,692
|
||||||||||||||||||||||||||||||||||||||||||||||
При перекомпиляции сервера перекомпилируется клиент, а что, собственно в этом плохого?04.03.2013, 12:54. Показов 4110. Ответов 38
Метки нет Все метки)
(
Друзья!
Начинаем цикл вопросов про COM- Объекты. Первый вопрос возник по статье Безверхова, вот здесь статья. Вот там такой пример:
...Итак, компилим сервер:
Я ничё не понимаю. Может кто-то разъяснит мне, что имел ввиду Безверхов, говоря:
0
|
04.03.2013, 12:54 | |
Ответы с готовыми решениями:
38
Как отключить клиент от сервера, не закрывая при этом приложения
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
04.03.2013, 17:51 | |
Учитывая, что myclient.cpp содержит включение myobj.h, то очевидно, что при изменении myobj.h нужно пересобрать myclient.cpp.
0
|
быдлокодер
![]() 1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,692
|
|
04.03.2013, 18:35 [ТС] | |
Нет. Вот я вам привёл пример. Если вы измените хидер и не тронете myclient.cpp, а используете myclient.o, который уже есть, небо с землёй местами не поменяется. Всё отлично слинкуется и отработает.
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||
04.03.2013, 18:40 | |||||||||||
Как же не поменяются? Если скажем было так:
0
|
быдлокодер
![]() 1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,692
|
|
04.03.2013, 19:24 [ТС] | |
Ну так вы попробуйте и скажите, что будет. Я вот например меняю код сервера и соответственно, хидер и не трогаю клиент вообще- только линкую (потому что без этого никак; так опять же прилинковываю ПРЕЖНИЙ клиент); и клиент как работал так и работает.
Другое дело, что, допустим мы удаляем из сервера какую-то функцию, а из клиента вызов её не удаляем. Но этот случай мы не рассматриваем, ибо не может клиент быть абсолютно автономен он сервера, он же должен знать, что в сервере присутствует функция такая-то. И если она и всегда будет присутствовать в сервере, то дальнейшие изменения его не повлияют на работу клиента, даже если реализация самой функции изменится. Хоть ты заизменяйся, хоть ты задобавляйся полей и других функци. Главное, чтобы прототип вызываемой в клиенте функции остался прежним.
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||||||||||||||||||||||||||||||
04.03.2013, 20:28 | ||||||||||||||||||||||||||||||||||||
Я попробовал, дело за Вами.
Вот вам код:
1
|
быдлокодер
![]() 1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,692
|
||||||
04.03.2013, 21:39 [ТС] | ||||||
Ну допустим. Но я вот сделал так:
Ну в общем не хотелось бы щас в причины этого всего углубляться, а хотелось бы определить для себя или прочесть где-то я не знаю- когда в случае изменения хидера надо перекомпилировать клиент, а когда необязательно. Безверхов вот считает что всегда надо. А вы как думаете?
0
|
04.03.2013, 23:56 | |
Не по теме: святая корова, а что будет когда ТС дойдет до IDL:D
0
|
05.03.2013, 01:07 | |
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
05.03.2013, 08:12 | |
kravam, заранее не известно какие изменения были внесены в заголовочный файл: может там пробелов понаставили, тогда пересборка как бы и не нужна. А может и полностью файл перелопатили. Но чтобы это узнать нужно проанализировать сделанные изменения. И, учитывая, что скорее всего изменения потребуют пересборки, лучше сделать это сразу, а не надеяться что и так прокатит. Особенно когда программа начнет вести себя странным образом.
0
|
быдлокодер
![]() 1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,692
|
|
05.03.2013, 10:39 [ТС] | |
вы хотели сказать в *.cpp файл?
В "заголовочный"здесь не подходит. Я пишу клиент. И я определённо должен видеть заголовочный файл. И все изменения в нём. В противном случае (если у меня нет перед глазами *.h файла) я должен перекомпилировать клиент ПЕРЕД КАЖДЫМ ЗАПУСКОМ- действительно, может *.h изменился, а я и не знаю! Но ради избежания такой ситуации мы и предполагаем, что именно все изменения в *.h нам видны заранее (перед каждым запуском), а вот изменения в*.cpp файле заранее не видны. Хотя мы здесь разобрались, что измененения в *.h не всегда предполагают изменения в *.cpp файле, но тем не менее, перекомпилировать всё равно надо. Вопрос лишь в том, на изменения в каком файле ориентироваться- на *.h или на*.cpp; и если на *.h, тогда (повторюсь) все изменения в нём именно что и должны быть видны заранее.
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
05.03.2013, 11:49 | |
Нет. Именно заголовочный. Ваш вопрос ведь появился на основании следующей цитаты:
0
|
быдлокодер
![]() 1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,692
|
|
05.03.2013, 12:08 [ТС] | |
Да, но только в вопросе имелось ввиду- что, во первых, как вы сами заметили
Вы же отвечая, предполагаете ++++++++++++++++++++++++++++++++++++++++ То есть я рассматриваю ситуацию- файл *.h изменился и мы об этом знаем. (и отсюда вопрос- всегда ли в этом случае надо пересобирать клиент) Вы рассматриваете ситуацию- то ли он изменился, то ли нет. ++++++++++++++++++++++++++++++++++++++++ Давайте всё-таки мою ситуацию рассмотрим. А с вашей-то всё понятно- коль скоро мы не знаем заранее, изменился *.h файл или нет, надо экзешник компилить на всякий случай каждый раз перед запуском...
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
05.03.2013, 13:29 | |
Не всегда. Как я уже говорил, допустим, добавили только пробелы в файл. Вероятно есть и другие ситуации, при которых можно избежать перекомпиляции. Но для этого надо проанализировать изменения. Т.о. есть 2 варианта:
1. Просто пересобрать всё по полной при изменении хедера. 2. Проанализировать изменения. И по результатам анализа принять решение о необходимости полной пересборки. А так как анализ изменений в подавляющем большинстве случаем займет больше времени, чем безусловная пересборка, то и заниматься таким анализом бессмысленно. Имхо.
1
|
Модератор
![]() 3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,429
|
|
05.03.2013, 13:51 | |
если вы меняли все что угодно в cpp файле - клиента перекомпилировать не нужно.
если вы меняли все что угодно в h файле реализации объекта - клиента перекомпилировать не нужно - вы наследовали от известного интерфейса и позиции методов интерфейса никогда не поменяются - клиент вообще не должен и не может видеть ничего кроме интерфейса. если вы меняли хоть что нибудь в h файле интерфейса - клиента нужно перекомпилировать всегда.
0
|
быдлокодер
![]() 1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,692
|
|
05.03.2013, 14:02 [ТС] | |
По вашей градации к чему относится этот пример?
https://www.cyberforum.ru/com-... ost4211119 Это по-моему второй случай: Там именно что поменяна реализация объекта- поля структуры переставлены местами. И именно что перекомпилировать клиента НУЖНО, иначе смотрите сами что по ссылке получается.
0
|
05.03.2013, 14:02 | |
Помогаю со студенческими работами здесь
20
Проверка на стороне сервера, что клиент обработал отправленные данные Зависает клиент при приёме от сервера
Чем пользоваться при создании клиент-сервера? Тормоза При Перекомпиляции Бд Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
|
Многопоточное программирование в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
|
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
|
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
|
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
|
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
|
Образование и практика
Igor3D 21.03.2025
Добрый день
А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
|
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
|
Async/await в Swift: Асинхронное программирование в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
|
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
|