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

» Вопросы по Embarcadero RAD Studio XE3

Автор: Eternal_Shield
Дата сообщения: 15.03.2013 11:06
Arioch1

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


[more]К сожалению, корректно выражать свои мысли не всем дано ... и это массово, поэтому мы и имеем то, что имеем [/more]
Автор: Arioch1
Дата сообщения: 15.03.2013 11:11

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


[more=реальный класс с заглушкой _Release для отладки в XE2]
Через IUnknown я не пробовал с этим классом работать, нужды не было.
А через мои интерфейсы в XE2 в режиме сборки для отладки - внутрь соотв. методов ставятся брейкпойнты и срабатывают

Код: TZXMLSSave = class (TInterfacedObject, IZXMLSSave, IZXMLSSaveImpl)
protected
(* two functions below are implementors interface and should be
mandatory overrode and re-implemented *)

/// returns zero on success, according to original
/// description for SaveXmlssToEXML
///
/// tries to guess format by filename in the base class
function DoSave: integer; virtual;
class function FormatDescriptions: TStringDynArray; virtual;

public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;

/// Factory function. I wish it could be default class property.
/// Ancestors may chose to override it to return their instances.
class function From(const zxbook: TZEXMLSS): IzXMLSSave; virtual;
protected
constructor Create (const zxbook: TZEXMLSS); overload;
constructor Create (const zxsaver: TZXMLSSave); overload; virtual;

function ExportFormat(const fmt: string): iZXMLSSave;
function As_(const fmt: string): iZXMLSSave; //inline;

function ExportTo(const fname: TFileName): iZXMLSSave;
function To_(const fname: TFileName): iZXMLSSave; //inline;

..... другие методы по настройке или выполнению действия
protected
.......
{$IfOpt D+}
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
{$EndIf}

protected
class procedure RegisterFormat(const sv: CZXMLSSaveClass);
class procedure UnRegisterFormat(const sv: CZXMLSSaveClass);
public
class procedure Register;
class procedure UnRegister;
end;

.....

{$IfOpt D+}
// debug-only hooks for setting breakpoints
// and superwising lifetime of saving API-wrapping objects
function TZXMLSSave._AddRef: Integer; StdCall;
begin
Result := inherited _AddRef;
end;

function TZXMLSSave._Release: Integer; StdCall;
begin
Result := inherited _Release;
end;
{$EndIf}
Автор: AlekXL
Дата сообщения: 15.03.2013 12:01

Цитата:
меня смутило слово " перехватывал "

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

потому что ваши примеры... это не перхват, это обычная реализация метода.

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

разница ваших примеров и моего : вы явно указываете stdcall, а я этого не сделал, поскольку не видел тут необходимости. Неважно, как называется метод, если он не объявлен stdcall то он не будет перехватывать.
Опять же, это топик для QC.
Автор: Eternal_Shield
Дата сообщения: 15.03.2013 13:24
Arioch1

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

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

AlekXL

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

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

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

[more]бедный delphi ....[/more]
Автор: AlekXL
Дата сообщения: 15.03.2013 14:10

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

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

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


Автор: Arioch1
Дата сообщения: 15.03.2013 14:13

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

зашибись.

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

блин, не надо к словам цепляться.
Автор: Eternal_Shield
Дата сообщения: 15.03.2013 14:40
AlekXL

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

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


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

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


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

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


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

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


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

Автор: Arioch1
Дата сообщения: 15.03.2013 19:57
Ну так вот ВСЕ методы интерфейсов - "виртуальные по реализации"
В точно таком же смысле.

Добавлено:

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


Стоп, машина. Виртуальный и интерфейс - это из разных сказок.

Сначала определись о чем ты говоришь, о методе класса или методе интерфейса. Это разные сущности, даже если иногда совпадает, что один реализован через другого
Автор: AlekXL
Дата сообщения: 16.03.2013 01:16

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

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

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

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

Код:
1. Метод интерфейса уже реализован методом класса
2. Последний не является вируальнным
Автор: Arioch1
Дата сообщения: 16.03.2013 01:56
AQTime снести не пробовали ?
Автор: HeMet
Дата сообщения: 16.03.2013 09:03
Оказывается, левая сигнатура у метода это «так задумано»:
_http://qc.embarcadero.com/wc/qcmain.aspx?d=112581

П.С. На баг наткнулся, когда лечил размытый текст в ФМ под Windows 7 и выше.

Это тоже интересно:
_http://qc.embarcadero.com/wc/qcmain.aspx?d=109657

Нет тела — нет дела
Автор: AlekXL
Дата сообщения: 16.03.2013 12:41

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

я его сразу снес. С ним вообще не работало. Думаю "виновник" этих проблем с компилятором используемый фреймворк DelphiSpring([more]
ах, паттерны, сколько лет программировал, и не знал, что пишу паттерны и антипаттерны, вроде Singleton, а теперь вот, старый дурак, учусь; только вот мне все это какую-то религию, в сравнении с к-й водопроводчик Иисус — верх умеренности [/more]) и сторонняя библиотека генериков.
Мы же прекрасно знаем, как стабильно с ними работает компилятор, попробуй только написать что-то нетривиальное. Тот же случай, к-й вы упоминали: невозможность объявить обобщенный класс для структурных переменных ссылочного типа, с констрайнтом class, я с этим столкнулся тоже.

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

Код: case TypeInfo(TItem)^.TypeKind of
tkClass:
tkInterface:
Автор: AlekXL
Дата сообщения: 18.03.2013 00:34
А вообще-то есть ли сейчас библиотека контейнеров, незаброшенная?
Автор: Arioch1
Дата сообщения: 18.03.2013 07:26
есть встроенная, есть Spring4Delphi

остальные стали малоактуальны с появлением дженериков
Автор: AlekXL
Дата сообщения: 19.03.2013 18:28

Цитата:
есть встроенная, есть Spring4Delphi
нет очереди с приоритетами, как здесь, нет TSortedDictionary(я реально его использовал[more], в c#, в проекте связанном с биржевой игрой - там нужно было инкрементально(при поступлении новой) обновлять лучшие N заявок или все заявки, ставка по к-м меньше или больше некоторого порога, по разным трейд-позициям. Я уже не помню всех деталей, но скорость была критична, и сортированный словарь был лучшим алгоритмическим решением, которое я смог вообразить. Помогла "C5" библиотека.[/more]).
В стандартной реализации нет поддержки интерфейсов, это вообще не вариант.

Цитата:
остальные стали малоактуальны с появлением дженериков
нет, не согласен. Та же вышеупомянутая delphi-coll лучшее, что можно сравнить с .NET C5. Но она заброшена!

И еще вопрос. Я сейчас пытаюсь обновить один проект на Delphi, написанный под Турбо... Та использовал библиотеку Aducom SQLITE, ныне заброшенную. Нужно проапредить ее на sql-ite реализацию - быструю(м.б. без обвязки TQuery), с обязательной поддержкой юникода, и желательно, совместимую с FPC, и НЕ ЗАБРОШЕННУЮ[more] Кстатии, я пытался скомпилить вышеупомянутую delphi-coll при помощи FPC, специально собранного из транка, так он зафейлил не только на анонимах, TArray<>,но еще и на объявлениях типа

Код:
TCollection<T>=class(..)
function SomeFun<T2>():IEnumerator<T2>;
end;
Автор: Arioch1
Дата сообщения: 19.03.2013 20:38

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


попробуй глянуть в mORMot
Автор: deks
Дата сообщения: 20.03.2013 12:17
AlekXL

по поводу SQLite логично смотреть в сторону AnyDAC, так как ныне он FireDAC и куплен EMRO для замены DBX/BDE.
Автор: Arioch1
Дата сообщения: 20.03.2013 12:36
мне кажется использоват ьуниверсальные библиотеки для одной единственной БД не всегда оправданно, особенно если автор делает упор на скорость.

И кроме того


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

AnyDAC - заброшена.
А FireDAC - несовместима с FPC
Автор: AlekXL
Дата сообщения: 20.03.2013 15:07

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



Цитата:
попробуй глянуть в mORMot

Я вообще слабо представляю, что такое ОРМ, и возможно, мне даже понадобится что=то такое(мне нужно будет сделать веб интерфейс для приложения. Я как-то делал DataSnap REST в XE2, и надеюсь, что есть какя-нибудь бесплатная реализация тех же ф-й). Однако глядя на исходики мормота, видно, что там для реализации используется RTTI, да еще низкоуровнево, без библиотек, на бинарном уровне.
Думаю, это НИ быстро, НИ переносимо. Да и чисто на вид, даже файловая структура мормота как-то мудрено и запутанно смотрится.
Есть еще sv-utils, и это. Оба заявляют кроссплатформу, и FPC. Первый кажется более живым. Будем выбирать.

Автор: Arioch1
Дата сообщения: 20.03.2013 15:28
а зачем тебе ВЕСЬ mORMot ? просто возьми из него модуль взаимодействия с SQLite, а остальное рассматривай как примеры его правильного исполдьзования, Best Practices

По меньшей мере этот проект:
1) Жив и собирается жить дальше
2) Официально бесплатен
3) Официально подддерживает Delphi 7+ и FPC
4) в истории про dataSnap был протестирован и вроде показал очень приличную скорость (как минимум это говорит об общем качестве проекта)


Добавлено:

Цитата:
да еще низкоуровнево, без библиотек, на бинарном уровне.  Думаю, это НИ быстро, НИ переносимо.

1) ты не собираешься использовать ЭТУ часть проекта. По крайней мере так ты пока сказал.
2) если нет других механизмов.

А насчёт скорости...
Вот эта весьма изветснаястатья висит, когда заработает - посмoтри.
http://robertocschneiders.wordpress.com/2012/11/22/datasnap-analysis-based-on-speed-stability-tests/

Выжимка из неё http://blog.synopse.info/post/2012/11/23/Speed-comparison-between-WCF,-Java,-DataSnap-and-mORMot

Хотя опять же ,какая тебя разница, можно ли из мормота сделать быстрый HTTP-REST сервер, если тебюе просто нужен поддерживаемый легковесный интерфейс к SQLite ?

Добавлено:
Посмотри вокруг http://blog.synopse.info/tag/SQLite3
Кстати, возможности зашить SQLite вовнутрь exe тоже приятный бонус.
Автор: AlekXL
Дата сообщения: 20.03.2013 20:57

Цитата:
Официально подддерживает Delphi 7

"Ну, умерла, и умерла!"- кричали подвыпившие гости.
К чОрту D7

Цитата:
Вот эта весьма изветснаястатья висит, когда заработает - посмoтри.
http://robertocschneiders.wordpress.com/2012/11/22/datasnap-analysis-based-on-speed-stability-tests/

Выжимка из неё http://blog.synopse.info/post/2012/11/23/Speed-comparison-between-WCF,-Java,-DataSnap-and-mORMot
блин, эту инди тоже в гроб. Кому вообще пришло в голову использовать синхронные подключения? Это ведь заведомый фейл. Есть же прекрасный фреймворк ICS, толстый, зато асинхронный


Цитата:
Хотя опять же ,какая тебя разница, можно ли из мормота сделать быстрый HTTP-REST сервер, если тебюе просто нужен поддерживаемый легковесный интерфейс к SQLite ?
Ну пока нужно для Windows, с нативным интерфесом.
А вот для андрюши в перспективе лучше сделать веб-интефейс, чтобы движок на паскале, а гуй во встроенном вебките, с далвик-оберткой apk. Да только в мормоте столько асма, что на арм его собрать - это умудриться, наверное.
Впрочем, лучше сделать со всеми плюшками для десктопа, а когда дойдет дело до порта, там уже думать. Не хочется ограничивать себя в инструментах, оглядываясь на другие платформы. Об этом еще преподобный Джобс говорил.

Цитата:
Посмотри вокруг http://blog.synopse.info/tag/SQLite3
Кстати, возможности зашить SQLite вовнутрь exe тоже приятный бонус.
Чо, и в 64-bit можно, хотя бы на Дельфи? Там какие-то непонятки. Во-первых, кушает ли компилятор ELF64, а то вроде жрет только COFF, и OMF, а для билдера ... генерит ELF64!
Я не видел туториалов, как собрать sqlite3 в VS. Вот билдером - я его собрал, есть блоге об этом, да только на выходе сразу dll, а объектники где?

Автор: AlekXL
Дата сообщения: 21.03.2013 02:10
кстатии, как в этом мормоте вернуть получить курсор на только что вставленный кортеж?

Код:
my_dbConnection.db.Execute('insert into ...
Автор: Arioch1
Дата сообщения: 21.03.2013 09:58
SQLite умеет поддерживает полный формат запроса ?

insert into table(a,b,c) values(1,2,3) RETURNING column_id ?

А вообще - http://stackoverflow.com/questions/3828098/

И на форуме Мормота поспрашивай, там обычно быстро отвечают.

Добавлено:
А еще посмотри сюда: http://www.sqlite.org/c3ref/last_insert_rowid.html
И посмотри в исходники - где-то этот вызов должен быть наверняка переведен на Паскаль, останетсятолько вызвать

Добавлено:
И кстати, я нне вижу, какой у тебя тертий параметр ? если уж взялся приводить код - приводи полностью.
Да у тебя и первый какой-то неправильный...

procedure Execute(aDB: TSQLite3DB; const aSQL: RawUTF8; out ID: Int64);
Автор: sergionn
Дата сообщения: 21.03.2013 20:22
Ну все ребята, что и требовалось доказать
_https://forums.embarcadero.com/thread.jspa?messageID=545107&#545107
не взлетела обезьяна, такой космический размер, и крэш на элементарщине,
тут даже бета не оправдание!
Я даже не хочу представлять что будет на андроиде c его фрагментацией и сложностью разработки в сравнении с ios,
мне кажется даже что fmx для андроида вообще может не быть.....
разочарован, разбит, угнетен.........
Автор: Eternal_Shield
Дата сообщения: 21.03.2013 20:36
sergionn

Цитата:
I listed out the segments in the executable; the __text segment is
15MB, __data is 4MB, __rsrc is 5MB, and __linkedit is 13MB.

15 метров текста ... феерично! Пол Александрийской библиотеки впихнули, не иначе! [more]Имхо, глупо было ожидать другого[/more]

Я сразу проигнорил и кросс, и огоньмакаку. На первое бы у румын не хватило мозгов более-менее адекватно реализовать (чего и имеем), а второе слишком кривое, чтобы выравнивать (монтировки все распродали, а фримана уволили ... точнее он сам ушёл).

[more]А про "репликацию" look and feel iOS с помощью битмапов - это сразу на Оскар![/more]
Автор: sergionn
Дата сообщения: 21.03.2013 21:25

Цитата:
Пол Александрийской библиотеки впихнули, не иначе

*** буду - там шейдеры сидят и для directx 9-10 разные.......
а может дебажная инфа сидит там по забывчивости не отключенная?
Я вообще что-то не нашел в эпсторе этот шедевр, только в каталоге каком-то,
может уже забанили к едреней фене за крэши?


Цитата:
Я сразу проигнорил и кросс, и огоньмакаку.

я повелся как 20-летний пацан, мне стыдно....

Автор: valgreesh
Дата сообщения: 22.03.2013 10:41
sergionn

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


Ты же, вроде, на Qt5 собирался? К чему такие страдания по обезьяне?


Цитата:
Я вообще что-то не нашел в эпсторе этот шедевр, только в каталоге каком-то, может уже забанили к едреней фене за крэши?


Лежит в Educational. И еще не ясно сколько из общих 27-ми метров занимает мобильный embedded (?) interbase используемый для хранения данных. Изначально эта поделка весила около 12 метров, что тоже не мало для такого уг.
Автор: sergionn
Дата сообщения: 22.03.2013 11:05

Цитата:
Ты же, вроде, на Qt5 собирался?

жду либы под visual studio 2012 - это первое,
второе - я за 1,5 года на обезьяне много чего наваял,
быстро не переведешь однако, вот надеялся до последнего.......


Цитата:
что тоже не мало для такого уг.

да уж немало и 12,
и крэш как пишут произошел именно по работе с памятью,
жрет ее видимо как на винде - не по детски, пихая в оперативу, что надо и не надо
Автор: valgreesh
Дата сообщения: 22.03.2013 11:43
sergionn

Цитата:
второе - я за 1,5 года на обезьяне много чего наваял


Сочувствую, конечно, однако не понимаю, как на этом можно хоть что-то наваять. Оно же не юзабельно совершенно, ни в дизайнтайме, ни в рантайме. Лично у меня все подходы заканчивались позывами на рвоту.


Цитата:
и крэш как пишут произошел именно по работе с памятью


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

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738

Предыдущая тема: [Delphi XE2] Размер PNG


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