|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
XperT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Помогите решить проблему: "Unit MyClasses was compiled with a different version of AppSettings.Z". Выскакивает при изменениях в классе AppSettings.Z, помогает только ребилд проекта, но это долго каждый раз такое делать.
Точно помню, что уже сталкивался с этой проблемой и решил её, но как я это тогда сделал не могу вспомнить. |
|||
|
||||
northener |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Недостаточно информации. Эта "проблема" имеет массу корней. Который из них вы затронули не известно. Например о каких изменениях в классе AppSettings.Z идёт речь?
-------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
XperT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
В общем так. Есть модуль AppSettings, в котором есть класс TAppSettings, в котором в свою очередь есть переменная класса TProgramFolders. Так вот изменения в класс TProgramFolders (например добавление новых констант и методов класс) приводят к появлению таких сообщений. Для большей ясности привожу кусок кода программы.
|
|||
|
||||
XperT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Апну тему. Может кто-то подскажет где почитать? Для меня например не понятно, почему IDE сама не контролирует какие модули нужно перекомпилировать.
|
|||
|
||||
XperT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
В общем удалось найти причину и устранить проблему. В моём случае проблема была из-за такой структуры файлов:
Модуль A: ссылается на модуль C (в interface) Модуль B: ссылается на модуль C (в interface) и на модуль А (в implementation) Модуль C: ссылается на модуль А (в implementation) Переделал немного структуру модулей таким образом, чтобы уменьшить количество перекрестных ссылок и проблема исчезла. |
|||
|
||||
Poseidon |
|
|||
Delphi developer Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Когда А ссылается на С, а С ссылается на А, это говорит об ошибке проектирования кода.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
XperT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Ок, тогда подскажите как сделать в такой ситуации: есть модуль с классом А, который генерирует кнопки в меню программе по клике на которые должна открываться определенная форма Б. Один из методов модуля А - это обработчик на клик по кнопке, в котором вызывается форма Б, а это значит, что необходимо добавить в зависимость модуль формы Б. В самой форме Б используется объект класса из модуля А для чтения настроек и генерирования правильных контролов и обработчикок. Получается, что А ссылается на Б, а Б ссылается на А. Какой выход из подобной ситуации без допуска ошибок по проектированию? Создавать в модуле Б свой класс с настройками, в которые будут копироваться необходимые значения из модуля А? Ну так это дублирования данных, что имхо еще хуже. Единственный вариант, который я вижу - это передавать в конструктор класса А делегат на создание формы Б, но в таком случае сильно ухудшается чтение кода, так как он получается размазан по 3 модулям. Очень сильно не хватает аналога сишным заголовочным файлам, тогда бы эта проблема исчезла сама собой. Там проще проектировать за счет того, что объявления и реализацию можно разнести по модулям. |
|||
|
||||
Poseidon |
|
|||
Delphi developer Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Если я правильно понял, в А у нас генерация кнопок и реакция на их нажатие. В Б у нас описана форма, на которой генерируются эти кнопки. Очевидно, что Б должен знать об А, но вот А совсем не должен знать о Б. Если приведете пример конкретного кода, то объясню на примере.
Уже это говорит о не правильном проектировании. Если в Б используется объект из А, то Б зависит от А. Описывать при этом в А обработчик события из Б как-то не логично. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |