Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #150 : 25-08-2009 04:40 » |
|
почему то как-то всё неубедительно по указателю можно узнать тип
- в рантайме ли? Всё равно же на этапе компиляции от пустого класса могут быть порождены наследники, а могу и не быть.
- если наследник - не пустой класс, то проблемы отпадают, а если тоже пустой, то проблем так же не появляется - ведь мемберов нет всё ещё можно сделать массив
ну и будет массив, который занимает 0 байт. Указатель на массив есть, но ведь мемберов у элементов то по прежнему нет Рушить нечего. Компилятор не даст ошибку совершить Если можно ОБЪЯВИТЬ пустой класс, то можно ОПРЕДЕЛИТЬ и объект-представитель пустого класса. Эти объекты размещаются в памяти. Их размещение предполагает выделение объекту участка памяти с уникальным адресом, а это означает, что объекты пустого класса имеют ненулевой размер.
вот только что разве эта формальность... Которую, в принципе, всё тот же компилятор мог бы обойти без проблем, не выделяя место. Ведь там всё равно ничего не храниться В общем, пока что я не понимаю, зачем так сделано
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #151 : 25-08-2009 05:35 » |
|
почему то как-то всё неубедительно по указателю можно узнать тип
- в рантайме ли? Всё равно же на этапе компиляции RTTI работает И уже давно используется в особо запущенных случаях диспетчеризации.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #152 : 25-08-2009 05:40 » |
|
рассказывай, что за зверь и как применять ?
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #154 : 25-08-2009 06:14 » |
|
dynamic_cast использовать пока не приходилось. А ссылки не желают открываться...
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #156 : 25-08-2009 06:24 » |
|
сайт тоже
|
|
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #157 : 25-08-2009 06:53 » |
|
|
|
|
Записан
|
Странно всё это....
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #158 : 25-08-2009 07:12 » |
|
дома гляну
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #159 : 25-08-2009 09:28 » |
|
Может это банальное выравнивание памяти под 4 байта? Тогда pragma pack нужен, если это имеет какое-то значение. Ты массив A попробуй посмотреть.
|
|
« Последнее редактирование: 25-08-2009 09:31 от Dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #160 : 25-08-2009 09:42 » |
|
нет, выравнивание ни при чём, я и 1 и 0 даже пробовал )
С массивом A a1[N] штука такая : - в дампе идёт выравнивание по 4 байта (заполнено 0xcc) , а sizeof(a1) даёт N ))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #161 : 22-11-2009 20:04 » |
|
нашёл ошибку в MFC-шном CRect (давно замечал проявление, но особо внимания не обращал, корректировал через +1 пару раз и забывал):
методы Width() и Height() возвращают значение на 1 меньше, чем нужно
|
|
« Последнее редактирование: 22-11-2009 20:20 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #162 : 22-11-2009 21:03 » |
|
Т.е. width = (right - left) так?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #163 : 22-11-2009 21:04 » |
|
CDC::FillSolidRect и CDC::Ellipse (и, наверное, другие функции тоже) выводят в прямоугольник на единицу меньше по высоте и ширине тоже... Собственно, апишные функции тоже. Придётся просто смириться и учитывать )) Т.е. width = (right - left) так?
ага. В исходниках именно так. ATLTYPES_INLINE int CRect::Width() const throw() { return right - left; } ATLTYPES_INLINE int CRect::Height() const throw() { return bottom - top; }
А должно быть right-left+1
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #164 : 22-11-2009 21:30 » |
|
пипец, как вспомню, сколько времени и нервов из-за этой хрени было в своё время потрачено ( Вылавливание пикселов как блох
Теперь хоть вооружён ))
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #165 : 22-11-2009 21:35 » |
|
А лечить чем будешь? Правкой заголовков?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #166 : 23-11-2009 04:36 » |
|
Правкой заголовков?
Боже упаси, так низя делать Даже если это свои заголовки, которые где то уже применялись. Буду учитывать на месте, не так уж часто используется. Обычно, когда делаю графику, контролирую под линзой в паинте, чтоб все размеры были такими, как задаю - собственно, так и обнаружил. Плюс-минус 1, да запомню парочку ситуаций Думаю, мелкомягкие уже давно этот косяк заметили, но не подправили всё по той же причине - чтобы ни у кого ничего не упало. Разумно. А вот то, что изначально так сделали - за это руки надо оторвать )))
|
|
« Последнее редактирование: 23-11-2009 04:39 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #167 : 23-11-2009 07:50 » |
|
Ох, Лёха, Лёха, на сердце суматоха... Всё за привидениями охотишься? Если мир не устроен так как тебе хочется, это ещё не значит что мир полон багов. CRect::Width
Calculates the width of CRect by subtracting the left value from the right value.
Remarks
The width can be negative.
Иногда полезно заглядывать в справочник даже по таким пустяковым ф-ям.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #168 : 23-11-2009 08:08 » |
|
Кстати в С# тоже самое. Вот пример работы кода: protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics gr = e.Graphics; Rectangle rc = new Rectangle(0, 0, 20, 20); int w = rc.Width; // w = 20 DrawRect(gr, 0, 0, rc.Width, rc.Height); }
DrawRect - просто рисует прямоугольник разноцветными линиями. Я сделал скрин с результата и увеличил его в Photoshop:
|
ss1.gif (22.76 Кб - загружено 1662 раз.)
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #169 : 23-11-2009 08:35 » |
|
Calculates the width of CRect by subtracting the left value from the right value. - само предложение - чушь ) опять скажешь "не будет оспаривать терминологию" ? Я под шириной пиксельного прямоугольника понимаю количество пикселов. Если L==0 и R==1 , то ширина == 2. А с отрицательными ширинами я не работаю, я их просто не отображаю. Ладно, спорить особо не о чем, просто запомним и учтём
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #170 : 23-11-2009 09:52 » |
|
Лёш, ключевая фраза - "Я под шириной пиксельного прямоугольника понимаю ...". Но это неправильный подход. Смотри, перед тобой некий механизм, например панель управления шаттлом. У тебя есть к нему мануал. Ты видишь кнопку "Сброс". И что? Полагаешься на "своё" понимание функциональности этой кнопки? Могу сказать только одно, у разработчиков наверняка были свои причины сделать именно так и не иначе. Это они задокументировали в мануале - те сообщили тебе об этом своём решении. Я лично неоднократно сталкивался с подобными ситуациями, когда на первый взгляд логика функции совершенно корявая, но при детальном разборе оказывется, что не всё так просто и самое идеальное решение - пойти по пути наименьшего сопротивления. Обрати внимание, у CRect ширина может быть отрицательной, что тоже задокументировано. И если уж ты сделал выбор использовать CRect, то надо ознакомиться с его свойствами и причудами, в крайнем случае отказаться от его использования.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #171 : 23-11-2009 09:59 » |
|
ну так я и буду пользоваться с учётом )
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #172 : 23-11-2009 10:41 » |
|
Ну и правильно, так все делают. Но ругаться-то зачем?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #173 : 23-11-2009 10:45 » |
|
а шоб не расслаблялись )))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #174 : 23-11-2009 12:26 » |
|
Джон, вот ткни , где в документации описано следующее. имеется контрол CMonthCalCtrl m_MCC . Когда тыкают курсором в новую дату, достаём эту дату: COleDateTime t; m_MCC.GetCurSel(t); //t.m_dt==3.1478710920272e-306 //t.m_status==t.invalid
при этом наше сегодняшнее время в этом формате примерно равно 40140.(...) вот так решил проблему: COleDateTime t;
SYSTEMTIME sys; ::memset(&sys,0,sizeof(sys)); m_MCC.GetCurSel(&sys);
//и косяк тут же виден : //sys.wHour=19312; //sys.wMinute=237; //sys.wSecond=61092; //sys.wMilliseconds=18; //ну, тут спорно )) //sys.<всё остальное в порядке>;
sys.wHour=0; sys.wMinute=0; sys.wSecond=0; sys.wMilliseconds=0; t=sys;
|
|
« Последнее редактирование: 23-11-2009 12:28 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #175 : 23-11-2009 14:22 » |
|
Лёш, ну даже и не знаю куда тыкать?
|
ss1.gif (7.78 Кб - загружено 1640 раз.)
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #176 : 23-11-2009 15:19 » |
|
непосредственно в докУмент, где сиё безарбузие описано
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #177 : 24-11-2009 07:12 » |
|
Лёш, какое безобразие? О чём ты? Всё работает. Я ж тебе скрин поэтому привёл. С твоим кодом. В тултипе содержимое пременной t с полями m_dt и m_status. Или тебе проект выложить?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #178 : 24-11-2009 07:22 » |
|
Джон, а, я не видел скрин из вапа, сорри.
Ещё забыл сказать, что я про VC6 говорил , в последующих могли исправить - я не попробовал
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #179 : 25-08-2010 06:23 » |
|
допустим, имеем чисто консольное приложение. Но хочется попользоваться АПИшными функциями. Для этого надо подключить // Файлы заголовков Windows: #include <windows.h>
но после этого происходит страшная ругань, которая лечится так: // Исключите редко используемые компоненты из заголовков Windows #define WIN32_LEAN_AND_MEAN
// Файлы заголовков Windows: #include <windows.h>
(подсмотрено в другом шаблоне проекта студии - проект для windows)
|
|
|
Записан
|
|
|
|
|