Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE3

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Открыть новую тему     Написать ответ в эту тему

Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
меня смутило слово " перехватывал "
 
я понял, что автору нужно, чтобы и в потомках от этого класса были перхвачены соотв. вызовы
 
потому что ваши примеры... это не перхват, это обычная реализация метода.
 
перехват - это всё же то, что делается вместо стандартного исполнения. Hook, interception...

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 11:56 15-03-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arioch1

Цитата:
меня смутило слово " перехватывал "    я понял, что автору нужно, чтобы и в потомках от этого класса были перхвачены соотв. вызовы    потому что ваши примеры... это не перхват, это обычная реализация метода.    перехват - это всё же то, что делается вместо стандартного исполнения. Hook, interception...


Подробнее...

Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 12:06 15-03-2013 | Исправлено: Eternal_Shield, 12:07 15-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
как можно можно переопределить метод _Release в TMyClass, чтобы при манипуляциях с IMyInterface вызывался именно он, а не TInterfacedObject._Release. Я думаю, не сможете,

 
реальный класс с заглушкой _Release для отладки в XE2
 
Добавлено:
Ну и для протокола, вот эти два условия

Цитата:
 как можно можно переопределить метод _Release в TMyClass,

и

Цитата:
  чтобы при манипуляциях с IMyInterface вызывался именно он, а не TInterfacedObject._Release.

вообще-то не связаны друг с другом.
 
 

Код:
 
TMyClass=class(TInterfacedObject,IMyInterface,IInterface)  
   public  
       procedure SomeMethod();  
       function NifNif(): integer;  stdcall; // не будем ПЕРЕопределать метод _Release
       function NafNaf(): integer;  stdcall; // не будем ПЕРЕопределать метод _Release
 
       function IMyInterface._Release=NifNif;
       function IInterface._Release=NafNaf;
   end;
 

 
 
Добавлено:

Цитата:
Вуаля, нет терь вызова TInterfacedObject._Release...Ну и?

ну и утечка памяти! плохой водопроводчик из Иисуса :-D

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 12:11 15-03-2013 | Исправлено: Arioch1, 12:12 15-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
меня смутило слово " перехватывал "
 
я понял, что автору нужно, чтобы и в потомках от этого класса были перхвачены соотв. вызовы
 
потому что ваши примеры... это не перхват, это обычная реализация метода.  

нет. Это перехват, поскольку метод уже реализован. И он не виртуальный. Кроме того, "реализация" интефейса частичная.
 
разница ваших примеров и моего : вы явно указываете stdcall, а я этого не сделал, поскольку не видел тут необходимости.  Неважно, как называется метод, если он не объявлен stdcall то он не будет перехватывать.
Опять же, это топик для QC.

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 13:01 15-03-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arioch1

Цитата:
ну и утечка памяти! плохой водопроводчик из Иисуса :-D

ну ты прям Oberstgruppenfuhrer очевидность!
 
AlekXL

Цитата:
Неважно, как называется метод, если он не объявлен stdcall то он не будет перехватывать.

Ctrl+Space для кого придумали? Когда объявляешь класс и жмакнешь комбинацию, то и увидешь все IInterface методы (и не только): QueryInteface, _AddRef и _Release .. и то, как они объявлены.  
 
Вообще, я в шоке, какой QC? Вы сигнатуру метода изменили не указав тип вызова. Чего хотим то в ответ? Однако
 
Подробнее...

Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 14:24 15-03-2013 | Исправлено: Eternal_Shield, 14:33 15-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вообще, я в шоке, какой QC? Вы сигнатуру метода изменили не указав тип вызова. Чего хотим то в ответ? Однако  

я хочу, чтобы Delphi явно указала мне на несоответствие сигнатур , поскольку я явно же указываю свою реализацию _Release как реализацию интерфейсного метода, компилятор либо должен принять это к исполнению, либо выдать ошибку. А не тихо игнорировать.
 
 Такой вот QC. Хочешь сказать, я не прав, щитовой ты наш?
 
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 15:10 15-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
нет. Это перехват, поскольку метод уже реализован. И он не виртуальный.

зашибись.
 
Т.е. динамические методы и message-методы - это перхват? ведь они не виртуальные.
И все events и procedure vairables отже перехавт ? вдеь их тоже можно измеить, а они не виртуальные методы ?
 
блин, не надо к словам цепляться.

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 15:13 15-03-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL

Цитата:
Хочешь сказать, я не прав, щитовой ты наш?

Если исключительно про (IInterface._Release=Method), то прав ... а так же, если желаете Delphi-дуэли, то я к вашим услугам ... или, иначе, смените тон, ибо мы не родственники, не друзья и даже не знакомые. Здесь не мои познания языка под вопросом
 
 

Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 15:40 15-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Т.е. динамические методы и message-методы - это перхват? они не виртуальные
они по реализации немного другие, но по сути - виртуальные на 100%. По конечному поведению.
 

Цитата:
И все events и procedure vairables отже перехавт ? вдеь их тоже можно измеить, а они не виртуальные методы ?
 

нет. я ранее указывал, что называю перехватом:
 

Цитата:
Это перехват, поскольку метод уже реализован. И он не виртуальный. Кроме того, "реализация" интефейса частичная.  

То есть критерии:
1. Метод уже реализован
2. Он не виртуальный,
И 3. , опционально,  частичная реализация, то есть нет реализации _Addref
 

Цитата:
потому что ваши примеры... это не перхват, это обычная реализация метода
да, это не то, вообще говоря. Сам каст экзепляра класса к интерфейсу неполиморфный.
 Лучше бы было, если бы в TInterfacedObject методы были объявлены виртуальными.
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 15:41 15-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну так вот ВСЕ методы интерфейсов - "виртуальные по реализации"
В точно таком же смысле.
 
Добавлено:

Цитата:
1. Метод уже реализован
  2. Он не виртуальный,

 
Стоп, машина. Виртуальный и интерфейс - это из разных сказок.
 
Сначала определись о чем ты говоришь, о методе класса или методе интерфейса. Это разные сущности, даже если иногда совпадает, что один реализован через другого

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 20:57 15-03-2013 | Исправлено: Arioch1, 20:57 15-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ну так вот ВСЕ методы интерфейсов - "виртуальные по реализации"
В точно таком же смысле.  

какая вируальность , если нет полиморфизма? Нету в плоскости интефейсов полиморфизма.  
Не "по реализации" любой интерфейс виртуальный, а лишь по механизму вызова
Лишь по нему, как ты сказал  

Цитата:
Виртуальный и интерфейс - это из разных сказок.  

По идее, лишь интерфейс как целое есть виртуальная сущность(поскольку у него могут быть различные реализации), но его методы, в Delphi, не подразумевают имплицитно полиморфного вызова.
Реализация может быть как статической, так и истинно виртуальной(полиморфной).
если хочешь точнее критерии использования термина "перехват" для метода,
 то  пожалуйста

Код:
 
1. Метод интерфейса уже реализован  методом класса
2. Последний не является вируальнным
 

В конечном счете, это нельзя сделать без битхака, так что это и впрямь перехват,  я же просто скопипастил весть TInterfacedObject, переименовал, и объявил нужные мне методы виртуальными.
Мне нужен контроль над временем жизни лишь моих классов.
 
 
 
 
 
 
Добавлено:
Eternal_Shield

Цитата:
или, иначе, смените тон, ибо мы не родственники, не друзья и даже не знакомые

вы это посеяли, ваш стиль общения меня задел:
 

Цитата:
Ctrl+Space для кого придумали?  


Цитата:
Вообще, я в шоке, какой QC? Вы сигнатуру метода изменили не указав тип вызова. Чего хотим то в ответ? Однако  


Цитата:
бедный delphi ....

 
я лишь вернул вам всходы.
 
 А Ctrl+Space - он и в теле методов кое-как работает, не говоря уже об объявлениях - конкретно у меня сейчас - не работает в некоторых объявлениях  классов.
 Кроме того, стандартный Ctrl+Space приводит к ошибкам компияции "out of memory", "AV-", "internal"(они появляются чаще обычного), так что я отключил его, и пользуюсь cnPack Code Input Helper.  

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 02:16 16-03-2013 | Исправлено: AlekXL, 02:29 16-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AQTime снести не пробовали ?

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 02:56 16-03-2013
HeMet

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Оказывается, левая сигнатура у метода это «так задумано»:
_http://qc.embarcadero.com/wc/qcmain.aspx?d=112581
 
П.С. На баг наткнулся, когда лечил размытый текст в ФМ под Windows 7 и выше.
 
Это тоже интересно:
_http://qc.embarcadero.com/wc/qcmain.aspx?d=109657
 
Нет тела — нет дела

Всего записей: 212 | Зарегистр. 05-09-2007 | Отправлено: 10:03 16-03-2013 | Исправлено: HeMet, 10:07 16-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
AQTime снести не пробовали ?

я его сразу снес. С ним вообще не работало.  Думаю "виновник" этих проблем с компилятором используемый фреймворк DelphiSpring(Подробнее...) и сторонняя библиотека генериков.  
Мы же прекрасно знаем, как стабильно с ними работает компилятор, попробуй только написать что-то нетривиальное. Тот же случай, к-й вы упоминали: невозможность объявить обобщенный класс для структурных переменных ссылочного типа, с констрайнтом class, я с этим столкнулся тоже.
 
В xe3 по-прежнему невозможно написать обобщенный контейнер, который будет работать как с произвольным классом, так и с произвольным интерфейсом (н-р Collections.Lists.TObjectList не параметризует <T:class>, и да "class type required") .  
В конце концов приходится писать бесконстрайнтовый генерик, и на этапе инициализации выяснять,  c чем мы имеем:

Код:
case TypeInfo(TItem)^.TypeKind of
tkClass:
tkInterface:
 


Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 13:41 16-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А вообще-то есть ли сейчас библиотека контейнеров, незаброшенная?

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 01:34 18-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть встроенная, есть Spring4Delphi
 
остальные стали малоактуальны с появлением дженериков

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 08:26 18-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
есть встроенная, есть Spring4Delphi  
нет очереди с приоритетами, как здесь, нет TSortedDictionary(я реально его использовалПодробнее...).  
В стандартной реализации нет поддержки интерфейсов, это вообще не вариант.

Цитата:
остальные стали малоактуальны с появлением дженериков
нет, не согласен. Та же вышеупомянутая delphi-coll лучшее, что можно сравнить с .NET C5. Но она заброшена!  
 
И еще вопрос. Я сейчас пытаюсь обновить один проект на Delphi, написанный под Турбо...  Та использовал библиотеку Aducom SQLITE, ныне заброшенную. Нужно проапредить ее  на sql-ite реализацию - быструю(м.б. без обвязки TQuery), с обязательной поддержкой юникода, и желательно, совместимую с FPC, и НЕ ЗАБРОШЕННУЮПодробнее...
 
 
 
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 19:28 19-03-2013 | Исправлено: AlekXL, 19:28 19-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Нужно проапредить ее  на sql-ite реализацию - быструю(м.б. без обвязки TQuery), с обязательной поддержкой юникода

 
попробуй глянуть в mORMot

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 21:38 19-03-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL
 
по поводу SQLite логично смотреть в сторону AnyDAC, так как ныне он FireDAC и куплен EMRO для замены DBX/BDE.

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 13:17 20-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мне кажется использоват ьуниверсальные библиотеки для одной единственной БД не всегда оправданно, особенно если автор делает упор на скорость.
 
И кроме того  
 

Цитата:
совместимую с FPC, и НЕ ЗАБРОШЕННУЮ

AnyDAC - заброшена.
А FireDAC - несовместима с FPC

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 13:36 20-03-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE3


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru