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

» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl

Автор: AlekXL
Дата сообщения: 15.06.2014 14:05

Цитата:
Офсайт умер, это да, а вот напрямую с Торри нормально скачалось.

да.. ошибся.
--н
неплохо бы нам тут шапку, раз уж мы застряли с этой ветке надолго
Автор: ego666
Дата сообщения: 17.06.2014 12:35

Цитата:
пожалуйста, додавите япошку:
http://qc.embarcadero.com/wc/qcmain.aspx?d=125396

Походу то, что хочет Александр - на этапе компиляции не получить, т.к. даже для тех же абстрактных методов, если они не реализованы, компилятор вместо прямого вызова скрыто генерирует вызов метода _AbstractError, а в случае интерфейса - у нас нет на этапе компиляции информации о реализующем его классе и позднее связывание не сделать, т.к. нельзя компилятору что-нибудь магически догенерировать к чужому реализующему классу, которого к тому же и нет. Остается только динамический каст.

Добавлено:
И вообще вся эта идея в духе приведения интерфейсов к объектам. Да и как то противоречит самим интерфейсам, у которых не должно быть данных (и не просто так).
Автор: Eternal_Shield
Дата сообщения: 17.06.2014 16:41
ego666

Цитата:
Походу то, что хочет Александр - на этапе компиляции не получить,

Не получить совсем, ибо интерфейс надо чем-то "удерживать" ... TObject as IObject - это же ведь не какое-то приведение типов в конце то концов! Ссылкой на метод экземпляра точно не удержать. Забавная хотелка у кого-то.

З.Ы. и пофиг, что там анонимка!
Автор: Frodo_Torbins
Дата сообщения: 17.06.2014 20:12
Eternal_Shield
Под капотом у анонимного метода обьект с интерфейсом.
Автор: Eternal_Shield
Дата сообщения: 17.06.2014 22:07
Frodo_Torbins

Цитата:
Под капотом у анонимного метода обьект с интерфейсом.

Это я в курсе Я не понимаю одного: зачем народ себе геморрой придумывает
Автор: AlekXL
Дата сообщения: 18.06.2014 08:13
ego666


Цитата:
Не получить совсем, ибо интерфейс надо чем-то "удерживать" ... TObject as IObject - это же ведь не какое-то приведение типов в конце то концов! Ссылкой на метод экземпляра точно не удержать. Забавная хотелка у кого-то.

о чем ты говоришь? Какой IObject ? Там есть все для вызова. Экзепляр, и указатель. Больше ничего не нужно.

Eternal_Shield

Цитата:
Походу то, что хочет Александр - на этапе компиляции не получить, т.к. даже для тех же абстрактных методов, если они не реализованы, компилятор вместо прямого вызова скрыто генерирует вызов метода _AbstractError, а в случае интерфейса - у нас нет на этапе компиляции информации о реализующем его классе и позднее связывание не сделать, т.к. нельзя компилятору что-нибудь магически догенерировать к чужому реализующему классу, которого к тому же и нет. Остается только динамический каст.

ерунда.
имея экземпляр, и указатель, вызов совершить тривиально. Нет никакой принципиально разницы между указателем на вирт метод, и методом интерфейса. Они суть одно и то же. Если аноним может указывать на вирт метод, то должен уметь и указывать на интерфейс.

Даже проще, потому что можно гарантировать инкрементом счетчика ссылок актуальность экзепляра, до вызова.


Цитата:
абстрактных методов, если они не реализованы, компилятор вместо прямого вызова скрыто генерирует вызов метода _AbstractError
не говори ерунды. Виртуальные вызовы в Delphi всегда выполняются виртуально. Другое дело, что для абстрактного метода генерируется заглушка, перенаправляющая на AbstractError. Доходит, в чем разница? Не вызов генерируется, а заглушка абстрактного метода. А вызов любого вирт метода всегда выглядит одинаково.


Цитата:
а в случае интерфейса - у нас нет на этапе компиляции информации о реализующем его классе и позднее связывание не сделать, т.к. нельзя компилятору что-нибудь магически догенерировать к чужому реализующему классу, которого к тому же и нет.
зачем что-то догенерировать? Аноним - это всегда "внешняя обертка", а не указатель. Всегда для нее генрируется экземпляр класса, и в это классе есть машинный код для процедуры вызова. Этой процедуре может содержать и вызов метода класса, и просто код. Так почему же нельзя сделать вызов интерфейсного метода?

Frodo_Torbins


Цитата:

Под капотом у анонимного метода обьект с интерфейсом.
то-то и оно.

Eternal_Shield

Цитата:
Это я в курсе Я не понимаю одного: зачем народ себе геморрой придумывает

Eternal_Shield, проблема с тобой лично -- в несмешных шутках(иначе для чего смайлы?). Меня лично, это разражает. Прошу, не говори лишь бы что. По теме, что плохого, если аноним сможет удерживать указатель на метод интерфейса?

Автор: Eternal_Shield
Дата сообщения: 19.06.2014 15:15
AlekXL

Цитата:
в несмешных шутках(иначе для чего смайлы?). Меня лично, это разражает.

Проще надо быть. Смайлы - это настроение человека. Если для вас улыбка - это признак насмешки/шутки, то смените коллектив.


Цитата:
Прошу, не говори лишь бы что.

Лишь бы что? Может, это ссылка на метод интерфейса, которая должна удерживать интерфейс, чтобы потом аноним вызвал _Release когда умрёт - лишь бы что? Кто из нас чушь морозит?


Цитата:
По теме, что плохого, если аноним сможет удерживать указатель на метод интерфейса?

Аноним удерживать интерфейс? Т.е. ты предлагаешь добавить ссылку на интерфейс (который удерживается анонимом) в объект анонима???!!! I'm out.
Автор: AlekXL
Дата сообщения: 19.06.2014 21:05

Цитата:
Лишь бы что? Может, это ссылка на метод интерфейса, которая должна удерживать интерфейс, чтобы потом аноним вызвал _Release когда умрёт - лишь бы что? Кто из нас чушь морозит?

ты. В чем проблема? ссылка на метод в дельфи всегда захватывает и экзепляр. Если экземпляр -- интерфейс, то очевидно, должен быть инкремент при инициализации значением, развно как и декремент при при деструкции анонима.
Делать ссылку голую, как в крестах -- так в Delphi никогда не делается.

Цитата:

Аноним удерживать интерфейс? Т.е. ты предлагаешь добавить ссылку на интерфейс (который удерживается анонимом) в объект анонима???!!! I'm out.
да, ты в ауте. и разумеется, аноним должен удерживать инстанс интефейса. Содержит же ссылка на метод сам инстанс метода.




Добавлено:

Цитата:
Проще надо быть. Смайлы - это настроение человека. Если для вас улыбка - это признак насмешки/шутки, то смените коллектив.

я не улыбаться пришел сюда. А получать знания, обменивать опытом. Попытка пошутить при обсуждении сложного вопроса у меня вызывает однозначно негативную реакцию. Всегда.
Автор: kaz_av
Дата сообщения: 20.06.2014 00:29
AlekXL

Цитата:
В чем проблема? ссылка на метод в дельфи всегда захватывает и экзепляр.

Безотносительно ваших терок... В мобильном компиляторе, где имеется ARC, делегат, оказывается, не удерживает объект, хотя, по логике, должен бы.
Автор: HeMet
Дата сообщения: 20.06.2014 09:29
Вышла бесплатная редакция AppMethod http://www.appmethod.com/pricing , которая содержит в себе только... C++. Что-то я их не понимаю...
Ко всему прочему после 30 дней можно разрабатывать только под Ведро с диагональю не более 6 дюймов.
Автор: RomanNT
Дата сообщения: 20.06.2014 10:06
Кто-нибудь пробовал в этом AppMethod разрабатывать? Какие впечатления?
Намного удобнее, чем, к примеру, в Eclipse под Андроид?
Автор: AlekXL
Дата сообщения: 20.06.2014 11:39
kaz_av


Цитата:
Безотносительно ваших терок... В мобильном компиляторе, где имеется ARC, делегат, оказывается, не удерживает объект, хотя, по логике, должен бы.

да, я тоже это выявил. Ни аноним, ни делегат, не инкрементируют счетчик.
И правильно -- "должен бы" удерживать. Это интуитивно подразумевается, казалось бы. Очередные грабли...

HeMet

Цитата:
Вышла бесплатная редакция AppMethod http://www.appmethod.com/pricing , которая содержит в себе только... C++. Что-то я их не понимаю...
а что удивительного? Думал, что-то ценное они на халяву предложат?

Если кресты, то лучше уж QT, чем эта обезьяна, которую, в отсутствие Delphi компилятора, еще и править невозможно.


Добавлено:
RomanNT


Цитата:
Кто-нибудь пробовал в этом AppMethod разрабатывать? Какие впечатления?
Намного удобнее, чем, к примеру, в Eclipse под Андроид?

даже не связывайся... это тебе, думается, любой опытный Delphi разраб скажет. Delphi Mobile только для истинно кроссплатформенных решений может быть оправдана. Вылизываешь под Windows, до блеска... Потому что под Андроидом вылизать практически невозможно.
---
Я глубоко убежден, что о качестве и пригодности(и перспективности) фреймворка(среда/компилятор/библиотеки) следует судить по силе лишь одного направления: деплой->отладчик.
В Delphi
1) ужасно медледнленная генерация приложения
2) перезапускаешь проект, без изменений -> все равно идет пересборка(пере-линковка, пере-деплой, пере-инсталляция, пере-запуск сервера отладки)... нунакуя?
3) отладчик тупит, приложение запускается как бы прежде отладки. Бряки на FormCreate не срабатывают.
4) вызовы к отладчику блокирующие -- среда залипает, пока идет этот вызов, например, пока идет запрос на данные для окна Call Stack. Непрофессионально.
5) отладчик хреново понимает структуры данных в Delphi. Примитивный Self.ClassName не работает .
--
Пока не пофиксят деплой/дебаг ничего хорошего не произойдет с FMX
Автор: Erazor84
Дата сообщения: 20.06.2014 12:46
RomanNT
Пробовал, неудобно
Имеет смысл только если нужно написать что-то простое и ты кроме языка Object Pascal ничего не знаешь.
Автор: VadimShvarts
Дата сообщения: 20.06.2014 15:01
All
В связи с выходом XE6 Update1 обновил версию XE6 Distiller

Автор: AlekXL
Дата сообщения: 21.06.2014 01:33
чета я не пойму
System.AnsiStrings.AnsiCompareStr(s1,s2)
генерит
E1057 Implicit string cast from 'UTF8String' to 'string'
при s1,s2:UTF8String..
зачем?
Автор: ZloyBrawler
Дата сообщения: 21.06.2014 08:50
AlekXL

type AnsiString = { built-in type };
type UTF8String = AnsiString;

System.AnsiStrings
function AnsiCompareStr(const S1, S2: AnsiString): Integer;

System.SysUtils
function AnsiCompareStr(const S1, S2: string): Integer;

Что у тебя вызывается? первая или вторая? думаю вторая))

Добавлено:
Конечно упыризм.

В .NET строковый тип данных, да как и все типы унаследован от System.Object, что дает возможность запихнуть в этот тип данных все относящиеся к нему методы и путаницы не возникает вроде как. А еще добротная тема методы расширения в C# http://msdn.microsoft.com/ru-ru/library/bb383977.aspx

Понятное дело в Delphi строковых типов данных пруд пруди, но стоило бы хоть как-то наводить порядок, а то объем модулей растет и растет, не тот указал вначале и потом ловишь E1057 Implicit string cast from 'UTF8String' to 'string' и другую хреноту.
Автор: kaz_av
Дата сообщения: 21.06.2014 09:56
AlekXL
Как зачем? UTF8String это = type AnsiString(65001); т.е. новый тип (не псевдоним) да еще с механизмом авто-конвертирования. А функциря принимает обычный AnsiString т.е. строку с кодировкой дефолтной локали. Вот компилятор тебя и предупреждает, что будет конвертировать из UTF8 в ANSI (и тут, кстати, возможна потеря данных). Все правильно.
Автор: Frodo_Torbins
Дата сообщения: 21.06.2014 20:22
AlekXL

Цитата:

Цитата: Лишь бы что? Может, это ссылка на метод интерфейса, которая должна удерживать интерфейс, чтобы потом аноним вызвал _Release когда умрёт - лишь бы что? Кто из нас чушь морозит?

ты. В чем проблема? ссылка на метод в дельфи всегда захватывает и экзепляр. Если экземпляр -- интерфейс, то очевидно, должен быть инкремент при инициализации значением, развно как и декремент при при деструкции анонима.
Делать ссылку голую, как в крестах -- так в Delphi никогда не делается.


Цитата:
Аноним удерживать интерфейс? Т.е. ты предлагаешь добавить ссылку на интерфейс (который удерживается анонимом) в объект анонима???!!! I'm out.

да, ты в ауте. и разумеется, аноним должен удерживать инстанс интефейса. Содержит же ссылка на метод сам инстанс метода.
Автор: AlekXL
Дата сообщения: 22.06.2014 05:08
Frodo_Torbins

Цитата:
отладка кода, где такое используется, станет тихим ужасом для программиста. Таким образом, вполне возможно, что запрашиваемая вами фича не реализована "by design".
да ну брось.. Какой там дизайн у этих мартышек? Х..м груши околачивать -- вот их дизайн.

ZloyBrawler

Цитата:
Что у тебя вызывается? первая или вторая? думаю вторая))
я явно указал, что у меня вызывается.


Цитата:
В .NET строковый тип данных, да как и все типы унаследован от System.Object, что дает возможность запихнуть в этот тип данных все относящиеся к нему методы и путаницы не возникает вроде как. А еще добротная тема методы расширения в C# http://msdn.microsoft.com/ru-ru/library/bb383977.aspx
ой перестань. Это профанация, когда и value типы, и классы(ссылочные типы) наследуются из одного корня.
Delphi ближе к железу, и потому всякие такие изыски в ней неуместны. Потому что ЦП не знает классов, структур. А только регистры, память, арифметика, и преданные анафеме goto/jmp
Я предпочитаю иметь представление, во что превращаются мои высокоуровневые конструкции в суровом мире машинного кода. Мы, Delphi-сты, и крестовики -- еще это помним.
kaz_av


Цитата:
Как зачем? UTF8String это = type AnsiString(65001); т.е. новый тип (не псевдоним) да еще с механизмом авто-конвертирования. А функциря принимает обычный AnsiString т.е. строку с кодировкой дефолтной локали. Вот компилятор тебя и предупреждает, что будет конвертировать из UTF8 в ANSI (и тут, кстати, возможна потеря данных). Все правильно.
ну да.. верно.. Хотя и ты не до конца догнал: там преобразование идет не по пути
UTF8String->AnsiString
а по пути Utf8String->UnicodeString->AnsiString
то есть первое преобразование безопасно.. А вот второе.. Оно и генерит варнинг. Короче, горе от ума.. Хорошо что я Warnings as Errors включил...
интересно, каково было бы поведение,есл Utf8String был бы объявлен без type?



Автор: kaz_av
Дата сообщения: 22.06.2014 10:09
AlekXL

Цитата:
Хотя и ты не до конца догнал

Там нечего догонять - компилятор более чем красноречиво все показывает генерируя на каждое подобное преобразование два предупреждения:

Цитата:
W1057 Implicit string cast from 'UTF8String' to 'string'
W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'

Более того, в дизассемблере все прекрасно видно.


Цитата:
интересно, каково было бы поведение,есл Utf8String был бы объявлен без type?

Нельзя строковый тип объявить псевдонимом (без type), и при этом указать другую кодовую страницу (та, что в скобках).
Автор: ego666
Дата сообщения: 23.06.2014 04:35

Цитата:
Вышла бесплатная редакция AppMethod http://www.appmethod.com/pricing , которая содержит в себе только... C++. Что-то я их не понимаю...
Ко всему прочему после 30 дней можно разрабатывать только под Ведро с диагональю не более 6 дюймов.

Ну что за еврейство...


Цитата:
Я глубоко убежден, что о качестве и пригодности(и перспективности) фреймворка(среда/компилятор/библиотеки) следует судить по силе лишь одного направления: деплой->отладчик.

Под андроид у всех отладчик убогий чуть менее чем полностью.


Цитата:
имея экземпляр, и указатель, вызов совершить тривиально. Нет никакой принципиально разницы между указателем на вирт метод, и методом интерфейса. Они суть одно и то же

И вправду, глянул так и есть. Но опять же думаю, что не просто так они это не реализовали, были причины, ибо точно также не присваивается указатель на метод класса.

P.S.
А если делать прямой каст, то аноним вроде даже как умеет следить за жизнью интерфейса.

Код: Foo := TFoo.Create as IFoo;
Bar := TFoo(Foo).Bar;

Foo := nil; //тут интерфейс не умрет
Bar := nil; //а тут умрет
Автор: Frodo_Torbins
Дата сообщения: 23.06.2014 11:06

Цитата:

Цитата: отладка кода, где такое используется, станет тихим ужасом для программиста. Таким образом, вполне возможно, что запрашиваемая вами фича не реализована "by design".
да ну брось.. Какой там дизайн у этих мартышек? Х..м груши околачивать -- вот их дизайн.
Автор: AlekXL
Дата сообщения: 23.06.2014 12:37
к первому предложению тоже есть претензии.
--
Друзья, модер (по моей просьбе) включил шапку в ветке. Давайте оформлять!
Автор: Vo1T
Дата сообщения: 26.06.2014 08:41
Список компонентов и возможная адаптация под XE6 тоже важна
Автор: vitusjet
Дата сообщения: 01.07.2014 11:53
Добрый день. Имею проблему. Не могу получить данные из базы в компонент DBGrid, как при размещении компонента на форме, так и при компиляции и получении файла .exe. Компоненты поместил на форму: ADOConnection, ADOTable, DataSource, DBGrid. Провайдер Microsoft.Jet.OLEDB.4.0. База на Access, формат .mdb. Версия: Delphi XE 2. Помогите, пожалуйста.
Автор: Alexzzy
Дата сообщения: 01.07.2014 12:25
vitusjet
Зашибись описание... Должно работать!
Автор: Medium
Дата сообщения: 01.07.2014 20:09
Добрый день, нужна помощь. Может не совсем в тему, но...
Помогите, плз, перевести на Delphi с Visual Basic строку:

If ((in_bait And Temp1) Xor (CRC_bait And Temp1)) Then

где Dim CRC_bait, in_bait, Temp1 As Byte.

совсем запутался в различной логике работы операторов AND и XOR в Delphi и Visual Basic.
Заранее спасибо.
Автор: X11
Дата сообщения: 01.07.2014 20:17

Цитата:
совсем запутался в различной логике работы операторов AND и XOR в Delphi и Visual Basic.


Эммм... мне кажется, что это всё равно что сравнивать операторы + или - в Delphi и Basic`е
Автор: Medium
Дата сообщения: 01.07.2014 20:24
X11

Цитата:
Эммм... мне кажется, что это всё равно что сравнивать операторы + или - в Delphi и Basic`е

Спасибо за быстрый ответ. Уже сам разобрался.
В Delphi эта строка будет выглядеть так:
If ((in_bait and Temp1) Xor (CRC_bait and Temp1)) = 1 then
Автор: dred2k
Дата сообщения: 01.07.2014 22:34
Medium

Ну почему "... = 1" ?
"... <> 0", по идее. Там ведь значение битовой операции будет, и результат может отличаться от 1. Смотря что они проверяли...
Просто приведи к Boolean все выражение.


Код: if(Boolean((in_bait and Temp1) Xor (CRC_bait and Temp1))) then

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

Предыдущая тема: Отмена встречи в Outlook из Excel VBA


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