Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Embarcadero RAD Studio XE2 (Pulsar)

Автор: Eternal_Shield
Дата сообщения: 08.11.2011 10:30
Arioch1

Цитата:
Вы очень разнообразно избегаете ответа на простой вопрос: где же именно в for-var-in-range должен использоваться ваш совет "Сколько раз советовали использовать CharInSet(var, set) для юникодных проверок?" ?

... значит смотрим что есть enumerator'ы через который работает for-in ... - это во-первых;

во-вторых, чего к CharInSet прицепились? Я, вроде, сказал очевидную вещь: для проверок Ansi/WideChar на множестве рекомендуется использовать CharInSet; Всё! Я нигде ни слова не сказал, что эта функа используется в for-in ... не морочьте мне мозг;

Повторюсь опять: При использовании WideChar в множествах компилятор урезает его до 1 байта. Не может элемент множества быть больше 1 байта; Само множество может быть больше 1 байта;

Поэтому всяческие проверки вида C[: WideChar] in [..] вообще не будут работать;

Как вариант написать свой for-in для перечисления WideChar'ов #:


Этот код будет работать начиная с делфи 2009 и выше;
Автор: Arioch1
Дата сообщения: 08.11.2011 10:39
> Я, вроде, сказал очевидную вещь:
Ну все как-то думали вы её к теме разговора сказали. Понимаете? Когда человек влезает в разговор и что-то говорит, обычно люди думают, что он по теме сказать пытается, а не от фонаря.
А оказывается, вы влезли в чужой разговор, сказали ни с чем не связанную прописную истину и с умным видом отчалили. Могли бы ещё посокрушаться, что на ноль делить не советуете, тоже сказали бы очевидную вещь. Настолько же полезную.


> При использовании WideChar в множествах компилятор урезает его до 1 байта
А мы и это уже и до вас поняли. Правда почему-то ворнингов не выдает, скотина.


> Поэтому всяческие проверки вида C[: WideChar] in [..] вообще не будут работать;
А ещё на ноль делить не нужно. И числовым переменным не нужно присваивать строчки. И много много очевидных вещей. НИКАК к теме разговора не относящихся. Или вы всё-таки покажете в обсуждавшемся коде ХОТЯ БЫ ОДНУ такую проверку ?
Автор: psa1974
Дата сообщения: 08.11.2011 17:46
mcka
Arioch1

Цитата:
var c : char; // или widechar
begin
for c in ['А'..'Я'] do showmessage(c); - НЕ работает в unicode!
end;

Все просто: структура типа "множество" испокон веков может содержать только 256 однобайтных элементов и индексация может осуществляться от 0 до 255. С другой стороны объявление var c : char; говорит нам о том что переменная объявлена как двубайтовая и имеет максимальный размер 65536. А теперь самое интересное: вот здесь for c in ['А'..'Я'] происходит попытка проверить, не входит ли двубайтовая переменная в множество однобайтовых элементов, максимальный индекс которых равен 255. Если входит - то выполняется тело цикла. Вот тут и происходит выход за пределы диапазона. И контроль пределов диапазона и собственно саму проверку выполняет сам компилятор, за что ему отдельное спасибо.

Тут:
Цитата:
var c : ['А'..'Я'];
begin
for c in ['А'..'Я'] do showmessage(c); - работает!
end;

все работает, потому что с объявлена как массив однобайтных символов, и при проверке не входит ли однобайтных символ в множество однобайтных символов никакого выхода за пределы диапазона не происходит.
Все просто как 5 копеек. Как еще более подробно разжевать - я не знаю.
ЗЫ: Вот эти "особоглубокие" выкладки и пытался объяснить здесь Eternal_Shield
.
Автор: ChSerg
Дата сообщения: 08.11.2011 21:02
Какая то чехарда получается с установкой полей version info проекта для разных платформ на XE2 update 2.
Когда поля пустые показывает нормальную табличку. При заполнении первых двух полей (допустим) и переключении конфигурации в комбо-боксе остается одно поле с длинной строкой, содержащей все поля verion info. Если дальше переключаться между кофигурациями, то может оставаться одно поле, или несколько.
К тому же общая установка полей для платформы совершенно не означает, что они поля установились для release и debug этой платформы.
Как правильно это всё работает, может кто-нить сказать?
Автор: Arioch1
Дата сообщения: 08.11.2011 21:22
> вот здесь for c in ['А'..'Я'] происходит попытка проверить, не входит ли двубайтовая переменная в множество однобайтовых элементов

чё, правда ??? попытка проверить, для каждого значения c ?
Вот то есть так с и пробегает 65536 разных значений и каждое из них проверяется ?

> как двубайтовая и имеет максимальный размер 65536
Кстати, это уже трёхбайтовая будет. Типичная программиcтская ошибка "промахнулся на один и не заметил, как попортил память" ;-P

Я от ужаса даже CPU Window открыл. Фффух... нет там никаких проверок. Сколько в множестве есть элементов - столько переменная и пробегает, ни больше, ни меньше. Никаких холостых пробегов, когда у перемeнной значение есть, а "тело цикла не выполняется" и в помине нет.

А если бы с какого-то перепугу и были - не я же их делаю, а компилятор. К нему советы и обращайте.
Или вы мне советуете "in" внутри цикла на функцию заменить ?
И как же писать надо, for CharInSet(c, ['A'..'Я']) do ... - так что ли вы предлагаете проверять ?

> И контроль пределов диапазона
да ну ? и как же этот код тогда без единой ошибки или предупреждения печатает буквы ЗА ПРЕДЕЛАМИ ДИАПАЗОНА русского алфавита ? где же тут "контроль выполняет" ?

> за что ему отдельное спасибо.
отдельное спасибо отдельно занесено в QC

> что с объявлена как массив однобайтных символов
Ух ты! и сколько индексов у этого массива? Бррр... Такие же фантазии, как проверка вхождения в множество.
PS: вы хоть компилировать это пробовали, прежде чем о массивах рассуждать ?

Добавлено:

Цитата:
К тому же общая установка полей для платформы совершенно не означает, что они поля установились для release и debug этой платформы.

Это да.
"Общие" настройки не наследуются и в EXE не попадают

Но склеиваться вроде не склеиваются.
И в Хелпе написано что только номер версии ставится для всех платформ сразу.
Автор: Frodo_Torbins
Дата сообщения: 08.11.2011 21:47
ChSerg
Еще на релизе без апдейтов пробовал с этим возится. В результате пришлось править dproj в блокноте. Но вышло вроде неплохо и строковые поля между конфигурациями нормально отнаследовались.
Автор: Andrey128
Дата сообщения: 09.11.2011 12:22
Установил XE2 на виртуалку и ужаснулся, размер Delphi+Demos+Help=~2.6G, размер того-же на XE=750M. Плюс к этому в %AppData% в папочках {...} еще 2.5G.
После установки XE2 попытался отключить, все что касается iOS, OS X и 64, но инсталлер говорит, что всего -44М.
Хотел XE2 на ноут поставить, а там с местом не очень.

Вот думаю, если поприбивать папки, с названиями osx32 и win64 в дальнейшем не будет проблем?
Автор: RageSV
Дата сообщения: 09.11.2011 15:39
Bill_PHO

Цитата:
У меня такой проект компилируется с ошибкой: F1026 File not found 'Data.DBXMSSQL.dcu'.
И правда. Поиском на компе обнаруживаются такие dcu, но только для платформ Win x86, x64.
Подключения к ORACLE, Interbase, MySQL компилируются без ошибок.

А Вы видели где-нибудь возможность подключения к MSSQL на платформе, отличной от Windows и Microsoft Mobile?
Автор: LG Team
Дата сообщения: 09.11.2011 16:05

Цитата:
возможность подключения к MSSQL на платформе, отличной от Windows


hттp://www.razorsql.com/articles/sql_server_mac.html
hттp://www.sommarskog.se/mssqlperl/unix.html
Автор: Bill_PHO
Дата сообщения: 09.11.2011 16:25
RageSV

До появления XE2 с ее FireMonkey и не пытался. А вот в FAQ от Embarcadero по теме написано, что применив dbExpress получить доступ можно, поэтому я и стал пробовать. Теперь же понятно, что соответствующих драйверов от Microsoft нет и вероятнее всего не будет.
От Embarcadero все же можно было ожидать (за деньги, которые они назначили за продукт), чтобы не было возможности выбирать неподдерживаемые свойства компонент для выбранной платформы.

LG Team

Спасибо за ссылки по теме.
Автор: Arioch1
Дата сообщения: 09.11.2011 21:33
если у кого есть старые программы, в которых используется ShowModal - имейте в виду.

http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:5029
Автор: Ludens
Дата сообщения: 10.11.2011 00:06
Не подскажете, с чего вдруг один из проектов, нормально компилировавшихся под XE, вдруг стал под XE2 спотыкаться на какой-то библиотеке, имеющей отношение к си (в си не разбираюсь совсем), по имени System.ZLib, которая тянет за собой файлы типа
{$L deflate.obj}
{$L inflate.obj}
{$L infback.obj}
{$L inffast.obj} и т. д.,
которых у меня вообще не оказалось на диске?
А иногда этот проект нормально компилируется и под XE2. Какая-то мистика, короче.
Устанавлено из XE2 только Delhpi, причем Lite.

Upd: блин, оказывается, даже новый свежесозданный пустой проект отказывается компилиться с теми же симптомами. Наверное, что-то в Options у меня стало неправильно.

Upd2: вот же чудеса: оказалось достаточным убрать нафиг файл System.ZLib.pas (я просто переименовал его), и все сразу стало нормально. Но мне все равно крайне интересно: ЧТО ЭТО БЫЛО?
Автор: Frodo_Torbins
Дата сообщения: 10.11.2011 09:58
Ludens
Скорее всего это были приколы лайта.
Автор: RageSV
Дата сообщения: 10.11.2011 10:27
LG Team

Цитата:
hттp://www.razorsql.com/articles/sql_server_mac.html
hттp://www.sommarskog.se/mssqlperl/unix.html

Восхитительно. Осталось все это прикрутить к delphi.
Специально не стал отсылать к разного рода opensource-проектом т.к. бессмысленно.
Единственный native jdbc-driver от ms, поддерживающий последние версии серверов, как ни странно, java-only.
DBX работает через nativ client.
Возможно, какое то решение появится от DevArt.
Во всех презентациях xe2 для osx еще до релиза говорили - используйте datasnap.
Автор: Lena44
Дата сообщения: 10.11.2011 13:44
В RAD XE в меню студии был пункт AQtime. В RAD XE2 его нет. Так и должно быть?
Автор: wasilissk
Дата сообщения: 10.11.2011 14:25
Lena44
Не работал ни с XE ни с XE2, но AQtime это сторонний очень мощный и дорогой продукт. Может конечно в XE в рекламных целях и добавляли его кастрированную версию, но что-то я в этом сильно сомневаюсь. Может вы просто поставили руборд-эдишн и забыли...
Автор: Arioch1
Дата сообщения: 10.11.2011 14:36
Добавляли, добавляли, не сомневайтесь.

Да и в XE2 вроде должно быть.

Страница 8 раздел Profiling
http://embarcadero.com/delphi-features-matrix

Добавлено:

Цитата:
Upd2: вот же чудеса: оказалось достаточным убрать нафиг файл System.ZLib.pas (я просто переименовал его), и все сразу стало нормально. Но мне все равно крайне интересно: ЧТО ЭТО БЫЛО?


Скорее всего умудрился ты отредактировать этот pas или ещё как-нибудь поменять ему дату.
Он стал новее, чем System.ZLib.dcu и его пытались перекомпилировать.
Автор: Bill_PHO
Дата сообщения: 10.11.2011 17:10
RageSV

Цитата:
Возможно, какое то решение появится от DevArt.


Нет, они не планируют.
Их ответ:
"SDAC не будет поддерживать Mac OS X потому что OLEDB и SQL Native Client не поддерживают Mac "
Автор: RageSV
Дата сообщения: 11.11.2011 12:38
Bill_PHO
Да. Я уже читал их ответ на эту тему.
И, как я понял, с чем-то новым они заморачиваться не хотят.
Автор: AnViSe
Дата сообщения: 14.11.2011 09:57
Я так понял в XE2 изменилось описание TList, коды ModalResult. Какие еще изменения есть в XE2 на которые стоит обратить внимание при переносе проекта с 2010, XE на XE2?
Автор: Man_Without_Face
Дата сообщения: 15.11.2011 13:14
Стоит вопрос о покупке лицензии XE2. Есть проект написанный на XE с технологией DanaSnap. Хватит ли мне Professional или обязательно нужен Enterprise? Спасибо.
Автор: Arioch1
Дата сообщения: 15.11.2011 13:22
@ Anvise - всё надо учитывать. Только ты знаешь из чего состоит проект, что может выстрелить ,а что нет.
http://docwiki.embarcadero.com/RADStudio/en/What's_New

@MWF: http://embarcadero.com/delphi-features-matrix

Автор: Ludens
Дата сообщения: 15.11.2011 13:30
sk9heaven

Цитата:
Раньше было Project->Options и внизу чекбокс Default, теперь его нету.


Присоединяюсь к вопросу.
Более того, раньше (в XE), если закрыть все проекты, то меню Project/Options превращалсь в Project/Default Options, с помощью которого можно было настроить дефолтные параметы для нового проекта. Теперь нет и этого.
Автор: AnViSe
Дата сообщения: 15.11.2011 14:31
Arioch1
Значит пробуем компилить проект в ХЕ2 и на этапе компиляции пытаемся определить откуда "выстрел" и валим там стрелка. ))
Автор: Arioch1
Дата сообщения: 15.11.2011 16:05
Ну... если ты не знаешь или не помнишь что в проекте - то да.
И не только компилишь, там ещё могут быть проблемы, которые только в работе проявляются, типа неверного размера буферов ввиду перехода AnsiChar -> WideChar.

Но в принципе прочитать что менялось и попробовать приложить это к проекту до компиляции, где это в принципе может вылезти - полезно.
Автор: psa1974
Дата сообщения: 15.11.2011 20:16
sk9heaven
Ludens

Цитата:
Раньше было Project->Options и внизу чекбокс Default, теперь его нету.

Флажок Default, который присутствовал внизу диалога Project->Options был удален из продукта. Если вы хотите задать параметры по умолчанию для нескольких проектов, в качестве альтернативы можно использовать наборы опций (Option Set), управление которыми доступно из диалогов Project > Options, Project Manager или Configuration Manager. Подробнее...
Автор: Ludens
Дата сообщения: 15.11.2011 20:16
sk9heaven

Цитата:
Как в XE2 сделать проект по-умолчанию

Похоже, теперь уже никак:
https://forums.embarcadero.com/thread.jspa?threadID=63078
Вкратце, смысл ответа эмбаркадабры: количество платформ теперь так велико, уж так велико, что понятие установок по умолчанию теряет смысл, и поэтому мы тихо убрали эту фичу. Если кому очень надо — сохраняйте параметры в файл .optset, а потом не забывайте подгрузить их в каждый новый проект.
Правда, я так и не понял, при чем тут количество платформ и почему вручную я по-прежнему могу задать каждому новому проекту одни и те же параметры, а автоматически сделать то же самое теперь не могу.
Автор: Arioch1
Дата сообщения: 16.11.2011 14:54
А встроенная поддержка DUnit тут у кого-то работает?

А то пришлось руками компилировать ,а там с Юникодом заморочки..

Мне в общем интересно, только у меня в XE2 в File / New / Other единственное где есть DUnit Test Project - это IntrWeb или нет ?
Автор: deks
Дата сообщения: 16.11.2011 23:24
Arioch1

У меня DUnit на XE2 нормально работает - даже кривую в D2010 формочку GUIRunner поправили!
Автор: Arioch1
Дата сообщения: 16.11.2011 23:25
Т.е. вот просто File / New / Other и там есть раздел Unit Test ?

а как ставил.
у меня с ISO upd1 и сверху upd 2.

Вот не знаю, может апдейт риво втсал, может таблетка виновата...

Добавлено:
deks - а это потому что ты запускаешь полную среду. Часто пишешь на C++ ?

Запусти только Delphi, без плюсов.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738

Предыдущая тема: Как сделать offline версию сайта со встроенным браузером?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.