быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
||||||||||||||||||||||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||||||||||||||||||||||
При перекомпиляции сервера перекомпилируется клиент, а что, собственно в этом плохого?04.03.2013, 12:54. Показов 4049. Ответов 38
Метки нет (Все метки)
Друзья!
Начинаем цикл вопросов про COM- Объекты. Первый вопрос возник по статье Безверхова, вот здесь статья. Вот там такой пример:
...Итак, компилим сервер:
Я ничё не понимаю. Может кто-то разъяснит мне, что имел ввиду Безверхов, говоря:
0
|
04.03.2013, 12:54 | |
Ответы с готовыми решениями:
38
Как отключить клиент от сервера, не закрывая при этом приложения Запрет копирования с сервера на клиент при условии, что буфер обмена и маппинг дисков останутся включенными Как узнать о том, что клиент дисконектнулся от сервера? Проверка на стороне сервера, что клиент обработал отправленные данные |
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
|
04.03.2013, 18:35 [ТС] | 3 |
Нет. Вот я вам привёл пример. Если вы измените хидер и не тронете myclient.cpp, а используете myclient.o, который уже есть, небо с землёй местами не поменяется. Всё отлично слинкуется и отработает.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||
04.03.2013, 18:40 | 4 | ||||||||||
Как же не поменяются? Если скажем было так:
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
|
04.03.2013, 19:24 [ТС] | 5 |
Ну так вы попробуйте и скажите, что будет. Я вот например меняю код сервера и соответственно, хидер и не трогаю клиент вообще- только линкую (потому что без этого никак; так опять же прилинковываю ПРЕЖНИЙ клиент); и клиент как работал так и работает.
Другое дело, что, допустим мы удаляем из сервера какую-то функцию, а из клиента вызов её не удаляем. Но этот случай мы не рассматриваем, ибо не может клиент быть абсолютно автономен он сервера, он же должен знать, что в сервере присутствует функция такая-то. И если она и всегда будет присутствовать в сервере, то дальнейшие изменения его не повлияют на работу клиента, даже если реализация самой функции изменится. Хоть ты заизменяйся, хоть ты задобавляйся полей и других функци. Главное, чтобы прототип вызываемой в клиенте функции остался прежним.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||||||||||||||||||||||||||||||
04.03.2013, 20:28 | 6 | |||||||||||||||||||||||||||||||||||
Я попробовал, дело за Вами.
Вот вам код:
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
||||||
04.03.2013, 21:39 [ТС] | 7 | |||||
Ну допустим. Но я вот сделал так:
Ну в общем не хотелось бы щас в причины этого всего углубляться, а хотелось бы определить для себя или прочесть где-то я не знаю- когда в случае изменения хидера надо перекомпилировать клиент, а когда необязательно. Безверхов вот считает что всегда надо. А вы как думаете?
0
|
Модератор
3398 / 2170 / 352
Регистрация: 13.01.2012
Сообщений: 8,404
|
|
04.03.2013, 22:04 | 8 |
мы думаем что если вы не хотите проблем нужно пересобрать всегда. в чем сложность?
2
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
|
04.03.2013, 22:46 [ТС] | 9 |
сложность в том, что вы думаете, а я бы хотел чтоб вы знали.
0
|
Jupiter
|
04.03.2013, 23:56
#10
|
Не по теме: святая корова, а что будет когда ТС дойдет до IDL:D
0
|
kravam
|
05.03.2013, 00:47
[ТС]
#11
|
Не по теме: Это типа я лох?
0
|
Jupiter
|
05.03.2013, 01:07
#12
|
0
|
kravam
|
05.03.2013, 02:13
[ТС]
#13
|
Не по теме: то есть мне не спрашивать больше или чё?
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
05.03.2013, 08:12 | 14 |
kravam, заранее не известно какие изменения были внесены в заголовочный файл: может там пробелов понаставили, тогда пересборка как бы и не нужна. А может и полностью файл перелопатили. Но чтобы это узнать нужно проанализировать сделанные изменения. И, учитывая, что скорее всего изменения потребуют пересборки, лучше сделать это сразу, а не надеяться что и так прокатит. Особенно когда программа начнет вести себя странным образом.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
|
05.03.2013, 10:39 [ТС] | 15 |
вы хотели сказать в *.cpp файл?
В "заголовочный"здесь не подходит. Я пишу клиент. И я определённо должен видеть заголовочный файл. И все изменения в нём. В противном случае (если у меня нет перед глазами *.h файла) я должен перекомпилировать клиент ПЕРЕД КАЖДЫМ ЗАПУСКОМ- действительно, может *.h изменился, а я и не знаю! Но ради избежания такой ситуации мы и предполагаем, что именно все изменения в *.h нам видны заранее (перед каждым запуском), а вот изменения в*.cpp файле заранее не видны. Хотя мы здесь разобрались, что измененения в *.h не всегда предполагают изменения в *.cpp файле, но тем не менее, перекомпилировать всё равно надо. Вопрос лишь в том, на изменения в каком файле ориентироваться- на *.h или на*.cpp; и если на *.h, тогда (повторюсь) все изменения в нём именно что и должны быть видны заранее.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
|
05.03.2013, 12:08 [ТС] | 17 |
Да, но только в вопросе имелось ввиду- что, во первых, как вы сами заметили
Вы же отвечая, предполагаете ++++++++++++++++++++++++++++++++++++++++ То есть я рассматриваю ситуацию- файл *.h изменился и мы об этом знаем. (и отсюда вопрос- всегда ли в этом случае надо пересобирать клиент) Вы рассматриваете ситуацию- то ли он изменился, то ли нет. ++++++++++++++++++++++++++++++++++++++++ Давайте всё-таки мою ситуацию рассмотрим. А с вашей-то всё понятно- коль скоро мы не знаем заранее, изменился *.h файл или нет, надо экзешник компилить на всякий случай каждый раз перед запуском...
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
05.03.2013, 13:29 | 18 |
Не всегда. Как я уже говорил, допустим, добавили только пробелы в файл. Вероятно есть и другие ситуации, при которых можно избежать перекомпиляции. Но для этого надо проанализировать изменения. Т.о. есть 2 варианта:
1. Просто пересобрать всё по полной при изменении хедера. 2. Проанализировать изменения. И по результатам анализа принять решение о необходимости полной пересборки. А так как анализ изменений в подавляющем большинстве случаем займет больше времени, чем безусловная пересборка, то и заниматься таким анализом бессмысленно. Имхо.
1
|
Модератор
3398 / 2170 / 352
Регистрация: 13.01.2012
Сообщений: 8,404
|
|
05.03.2013, 13:51 | 19 |
если вы меняли все что угодно в cpp файле - клиента перекомпилировать не нужно.
если вы меняли все что угодно в h файле реализации объекта - клиента перекомпилировать не нужно - вы наследовали от известного интерфейса и позиции методов интерфейса никогда не поменяются - клиент вообще не должен и не может видеть ничего кроме интерфейса. если вы меняли хоть что нибудь в h файле интерфейса - клиента нужно перекомпилировать всегда.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,680
|
|
05.03.2013, 14:02 [ТС] | 20 |
По вашей градации к чему относится этот пример?
https://www.cyberforum.ru/com-... ost4211119 Это по-моему второй случай: Там именно что поменяна реализация объекта- поля структуры переставлены местами. И именно что перекомпилировать клиента НУЖНО, иначе смотрите сами что по ссылке получается.
0
|
05.03.2013, 14:02 | |
05.03.2013, 14:02 | |
Помогаю со студенческими работами здесь
20
Зависает клиент при приёме от сервера Как загрузить файл с сервера по ссылке, при этом переименовав его Чем пользоваться при создании клиент-сервера? Тормоза При Перекомпиляции Бд Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |