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

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

Автор: kaz_av
Дата сообщения: 06.02.2014 16:03
deks

Цитата:
Под Win32 (точнее .NET WinForms/WPF) есть дизайнеры в Визуал студии, оксиген их поддерживает.

Я в контексте cpu native говорю, там же об этом речь.

Цитата:
Смысла делать классический Win32 компилятор? Ну хз куда Microsoft идет и чего там будет в будущем у WinRT

WinRT они уже поддерживают. А вот кроме Win и Lin, опять же в контексте cpu native, ничего в голову не приходит. Хофман, сказав про cpu native, заинтриговал, мол не может сказать большего. Но если бы это была просто поддержка Linux Server то и говорить больше нечего. Выходит планируют что-то более серьезное?
Автор: HeMet
Дата сообщения: 06.02.2014 18:09

Цитата:
что интересно - задавайте! Я пользую сабж, могу на что-то ответить.

Спасибо, но пока достаточно серьезного интереса у меня к нему нет: на работе использую Xamarin и Objective-C. Побаловаться им тоже пока желания не возникает, потому что я в нём сейчас вижу Objective-C с припаскаленным синтаксисом. Зачем мне ещё один Objective-C, но с := и begin/end?

Цитата:
А как вы хотите инициализировать Objective-C класс?  

Как обычно inherited ConstructorName, а дальше он может вполне себе компилироваться в вызов инициализатора с правкой и проверкой self. Типа как Xamarin сделали для C#. Есть тут конечно свои нюансы, но придумать что-нибудь можно было бы, я думаю.
Автор: deks
Дата сообщения: 06.02.2014 20:08
HeMet

В Оксигене есть традиционный конструктор, но в рассматриваемом случае класс унаследован от Objective-C класса UIView. Там традиционная для Cocoa схема инициализации alloc/init. Так как никакой обертки над нативным классом не сделано, пользуем ту же схему. У Ксамарина же над контрольями сделаны обертки, что с одной стороны облегчает их использование, унифицируя с шарповым окружением, а с другой стороны - ухудшает interop с платформой.

Например, в дельфях для меня очередным show stopper'ом стала невозможность заделать custom cell для использования с нативным списком - баз кастомизации нативные контролья довольно страшные. Почти все что пишется на iOS кастомизируется именно таким образом. Если нативный контроль еще можно обернуть и заюзать в дельфях (есть и проекты TMS, и open source), то чего делать с невозможностью адекватного переопределения классов неясно.

Добавлено:
kaz_av

Да, планы CPU native от ремобджектов интригуют. Но вот делать традиционный win32 я смысла не вижу - есть дельфи, есть лазарус. К тому же будущее win32 платформы очень туманное - то оно legacy в win8, то не очень. В любом случае, в стор от МС такие приблуды не возьмут. Ну и на arm оно не работает.

Сделать CPU native компиляцию с#?

В общем, у меня фантазии кроме Linux Server не хватает. А Linux Server - это существенная часть серверного рынка, вполне себе сегмент для работы DataAbstract/SDK серверов. Особенно, если используя Sugar и исходники Mono собрать сервер без Mono Runtime. Я бы с удовольствием перевел бы домашний сервер вообще на роутер. Щас у меня все крутится на RPi и NAS Synology (хотя mono и староватый, 2.10.х).
Автор: HeMet
Дата сообщения: 06.02.2014 21:22

Цитата:
с другой стороны - ухудшает interop с платформой.  

Я только две проблемы встретил пока:
1. нельзя испортировать два инициализатора с одинаковыми сигнатурами. Всё биндинги в итоге превращаются в классы заглушки, которые по сути вызывают те же системные методы, что и Obj-C. Если активно данные между рантаймами не гонять на каждый чих, то накладные расходы незначительные.
2. Биндинги не дружат с исключениями obj-c. Любое привёд к тихой смерти приложения. Правда, на моей памяти такое случалось ровно раз

Есть у Xamarin, конечно, и другие проблемы: GC c ARC порой косячно уживаются (самая мозгодробительная бага, которую поймал, была из-за этого). Правда, такое встречается только в каких-то особенных случаях.

В остальном биндинги довольно хорошо позволяют обворачивать чужой код и при этом, например, для протоколов генерить события и делегаты (хотя родного способа с делегатом никто не лишает).


Цитата:
Если нативный контроль еще можно обернуть и заюзать в дельфях (есть и проекты TMS, и open source), то чего делать с невозможностью адекватного переопределения классов неясно.  

Обернуть obj-c класс там можно, свой отправить на ту сторону — тоже, а унаследоваться и отправить нельзя?
Автор: deks
Дата сообщения: 06.02.2014 21:45
HeMet

Поподробнее: в ксамарине можно расширить класс Objective-C и скормить наследника в Objective-C runtime?
Автор: kaz_av
Дата сообщения: 07.02.2014 00:38
deks

Цитата:
Но вот делать традиционный win32 я смысла не вижу - есть дельфи, есть лазарус.


Цитата:
В общем, у меня фантазии кроме Linux Server не хватает. А Linux Server - это существенная часть серверного рынка, вполне себе сегмент для работы DataAbstract/SDK серверов.

Так Lazarus на Linux тоже есть, а DataAbstract поддерживает FPC.


Цитата:
К тому же будущее win32 платформы очень туманное - то оно legacy в win8, то не очень.

Не-не, легаси оно только на устах маркетологов. Весь энтерпрайз крепко сидит на виндовом десктопе. Ембаркадеро, считай, только с этого сегмента и кормится.


Цитата:
В любом случае, в стор от МС такие приблуды не возьмут.

Это не так. В сторе десктопный софт размещать можно, устанавливать из стора нельзя.
Автор: AlekXL
Дата сообщения: 07.02.2014 03:34

Цитата:
Не-не, легаси оно только на устах маркетологов.

и не только ведь на устах, и в умах эти тараканы.
---
Кряка на оксиджен нет.. зелен виноград.
Автор: HeMet
Дата сообщения: 07.02.2014 07:54

Цитата:
Поподробнее: в ксамарине можно расширить класс Objective-C и скормить наследника в Objective-C runtime?

"унаследоваться и отправить" - это я про Делфи. Если же вопрос именно про Xamarin, то да, можно.
Автор: AlexCoRu
Дата сообщения: 07.02.2014 13:57
Помогите, никак не пойму: "То ли лыжи не едут, то ли я?".
Выборка и обновление данных из БД FireBird организована через хранимые процедуры. Реализую это в Студии XE5U2 средствами FireDAC. На форме: TFDConnection, TFDPhysFBDriverLink, TFDTransaction, TFDStoredProc, TFDCommand. TFDStoredProc для выборки данных (возвращает набор данных), TFDCommand выполняет обновления этого набора, TFDTransaction - UpdateTransaction. ХП EQUIPMENT_CLASS_INSERT добавляет запись и возвращает первичный ключ.
[more=Обработчик события OnUpdateRecord у TFDStoredProc]
Код:
procedure TForm1.EquipmentClassUpdateRecord(ASender: TDataSet; ARequest: TFDUpdateRequest; var AAction: TFDErrorAction; AOptions: TFDUpdateRowOptions);
begin
if ARequest = arInsert then
begin
UpdCommand.CommandText.Text := 'EQUIPMENT_CLASS_INSERT';
UpdCommand.Params.Clear;
UpdCommand.Params.CreateParam(ftUnknown, 'PARENT_ID', ptInput).Value := ASender['PARENT_ID'];
UpdCommand.Params.CreateParam(ftUnknown, 'DESCRIPTION', ptInput).Value := ASender['DESCRIPTION'];
UpdCommand.Params.CreateParam(ftUnknown, 'ID', ptOutput).Value;
UpdCommand.Transaction.StartTransaction;
try
UpdCommand.Execute;
UpdCommand.Transaction.Commit;
ASender['ID'] := UpdCommand['ID'];
except
UpdCommand.Transaction.Rollback;
AAction := eaFail;
end;
UpdCommand.Unprepare;
end else
if ARequest = arUpdate then
begin
UpdCommand.CommandText.Text := 'EQUIPMENT_CLASS_UPDATE';
UpdCommand.Params.Clear;
UpdCommand.Params.CreateParam(ftUnknown, 'ID', ptInput).Value := ASender['ID'];
UpdCommand.Params.CreateParam(ftUnknown, 'PARENT_ID', ptInput).Value := ASender['PARENT_ID'];
UpdCommand.Params.CreateParam(ftUnknown, 'DESCRIPTION', ptInput).Value := ASender['DESCRIPTION'];
UpdCommand.Transaction.StartTransaction;
try
UpdCommand.Execute;
UpdCommand.Transaction.Commit;
except
UpdCommand.Transaction.Rollback;
AAction := eaFail;
end;
UpdCommand.Unprepare;
end else
if ARequest = arDelete then
begin
UpdCommand.CommandText.Text := 'EQUIPMENT_CLASS_DELETE';
UpdCommand.Params.Clear;
UpdCommand.Params.CreateParam(ftUnknown, 'ID', ptInput).Value := ASender['ID'];
UpdCommand.Transaction.StartTransaction;
try
UpdCommand.Execute;
UpdCommand.Transaction.Commit;
except
UpdCommand.Transaction.Rollback;
AAction := eaFail;
end;
UpdCommand.Unprepare;
end;
end;
Автор: deks
Дата сообщения: 07.02.2014 14:52
AlexCoRu

Смотрим на код:

EquipmentClass.Post; // <-- какая запись после Post будет текущей?
V := EquipmentClass['ID'];

С чего вы решили что EquipmentClass "стоит" на нужной записи? После Post хз где находится указатель на текущую запись! Давно не смотрел AnyDAC, но данный кусок кода вызывает у меня вопросы. Я бы запоминал нужный ID в момент манипуляций, и потом бы его искал по Locate, и не делал бы допущений - на что именно указывает текущая запись в наборе данных. Есть шансы, что допущение будет неверным.
Автор: AlexCoRu
Дата сообщения: 07.02.2014 15:05
deks, значение V соответсвует новому ключу. Кроме того далее:

EquipmentClass.First; // специально для проверки
if EquipmentClass.Locate('ID', V) then // True
begin
EquipmentClass.Edit;
EquipmentClass['DESCRIPTION'] := 'DESCRIPTION1';
EquipmentClass.Post; // смотрю IBExpert - значение в БД изменилось, ID = V
end;

Это упрощённый тестовый пример для исследования. Обнаружилось в cxGrid, а потом что бы исключить влияние дев, проверил таким образом.
Автор: deks
Дата сообщения: 07.02.2014 15:34
AlexCoRu

Хм. А как удаление не работает? Не удаляет? Ошибку бросает?
Автор: kaz_av
Дата сообщения: 07.02.2014 16:40
AlekXL

Цитата:
Кряка на оксиджен нет.. зелен виноград.

Кряк не нужен, там триал сбрасывается чисткой реестра. Кроме того, у них есть бесплатный компилятор для командной строки, а на просторах инета есть бесплатная IDE для него (убогая правда).
Автор: AlexCoRu
Дата сообщения: 07.02.2014 18:44
deks

Цитата:
Хм. А как удаление не работает? Не удаляет? Ошибку бросает?

Конечно, просто не удаляет. В ХП передаётся ID=NULL, в ней проверки NOT NULL нет и всё.
До вызова post указатель записи установлен на нужную запись, а в обработчике OnUpdateRecord уже на конец набора. Пробовал трассировать вызов post, но там тёмный лес.
Автор: deks
Дата сообщения: 07.02.2014 21:32
AlexCoRu

Могу только посоветовать отвязать хранение нужного Id от текущей записи! Очевидно ж, что сбрасывается где то data set! Так что тупо заведите в классе поле.
Автор: AlexCoRu
Дата сообщения: 07.02.2014 22:32
deks

Цитата:
Очевидно ж, что сбрасывается где то data set!

Воот и я об этом же. Или после ASender['ID'] := UpdCommand['ID'] нужно делать что-то ещё, или действительно лыжи не едут, т.е. баг FD.
Автор: AlekXL
Дата сообщения: 09.02.2014 20:19
Все чаще сталкиваюсь с необходимостью встройки C++ кода в свое приложение. Ну, в XE5/XE4 32-bit С++ Builder компилятор просто отказывается работать ("failed to allocate SAVEMEM"). А в старой 2007,но он далек от совместимости с новейшими стандартами.


А я хочу отлаживать свой Дельфи код и подключенную либу без шаманства , в одной среде. Скажите, может как-то можно сгенерить бинарники(dll || obj) такие, из С++, каким-нибудь норматьным компилятором , типа VC++ или MingW (CLang, whatever..) чтобы этот бинарник содержал отладочную инфу, понимаемую Delphi отладчиком?
Автор: deks
Дата сообщения: 10.02.2014 13:05
AlexCoRu

может, вместо запоминания Id лучше Bookmark сделать? А так то - можно в саппорт форумы писать, Дмитрий Арефьев отвечает на такие запросы. Ну или на sql.ru - это по теме, и там он тоже бывает. К сожалению, на XE5 не могу посмотреть - нет под рукой нужной виртуалки (ставил давно и для экспериментов - после теста потер)
Автор: Big17
Дата сообщения: 11.02.2014 22:23
Bookmark, конечно же юзайте
Автор: LGTeam
Дата сообщения: 11.02.2014 22:52
пробую андроид, string s = '012345'
почему s[1] это '1' а system.copy(s, 1, 1) это '0'
Автор: kaz_av
Дата сообщения: 12.02.2014 00:25
LGTeam
Потому-что классические строковые функции работают по прежнему, а строки в мобильных компиляторах по дефолту теперь индексируются с нуля. Впрочем это управляется директивой {$ZEROBASEDSTRINGS ON/OFF}. Для работы со строками индексируемыми с нуля предлагается использовать хелпер для строк т.е. String.Copy(). В справке это все есть (Migrating Delphi Code to Mobile from Desktop).
Автор: AlekXL
Дата сообщения: 28.02.2014 05:06
предположим, есть два объекта, в которых не допускается использование виртуальных методов

Код:
type
MyObjBase=object
end;
MyObjDerived=object(MyObjBase)
end;
Автор: ChSerg
Дата сообщения: 28.02.2014 07:45
AlekXL
if ob is MyObjDerived then
...
else
...
Автор: A_V
Дата сообщения: 28.02.2014 20:25
ChSerg
у него же 'object' - старый паскалевский объект без classType.
AlekXL
думаю, что возможно, если перехватить System.@InitializeRecord


Добавлено:
заинтересовала тема, в качестве proof of concept , сваял на основе старых наработок перехват InitializeRecord и FinalizeRecord, работает
ф-ия типа такой
objectTypeIs(Pointer(obj), TypeInfo(MyObjDerived))
или
objectNameIs(@obj, 'MyObjDerived')


если такой изврат интересен, пиши, выложу полностью код
Автор: AlekXL
Дата сообщения: 03.03.2014 12:08

Цитата:
заинтересовала тема, в качестве proof of concept , сваял на основе старых наработок перехват InitializeRecord и FinalizeRecord, работает
ф-ия типа такой
objectTypeIs(Pointer(obj), TypeInfo(MyObjDerived))
или
objectNameIs(@obj, 'MyObjDerived')


если такой изврат интересен, пиши, выложу полностью код

вряд ли я стал бы это использовать, но в целях повышения квалификации, и ради академического интереса: выкладывай, конечно!
Автор: deks
Дата сообщения: 03.03.2014 13:57
A_V
AlekXL

Скажите - а для этих "старых" объектов существует такое понятие, как конструктор? Как они создаются? Ну - для общего развития))

Upd. Side-topic: новости с полей оксигена.

Два слива от марка - первый:


Цитата:
That said, RemObjects C# is not the last col technology we have up our sleeves and brewing in the labs. i expect and hope that CrossBox will be a native mac app w/o Mono dependency soon(ish), without being rewritten for the "for Cocoa" compiler. If i say any more, Carlo will get on the next plane to Berlin and kill me, though.

*where by soonish, i mean hopefully sometime this year wink


Второй:


Цитата:
>> Now I just need a sweet, native OSX IDE for RO C# and Oxygene
also, hopefully, late(r) this year wink. Might be sooner rather than later — i'm amazed how many thing i already do Mac side in Fire myself, these days. But we still have some ways to go wink


Выводы: первое - готовится что-то, позволяющее иметь .NET RTL на OSX/ (iOS?).

Второе - есть альфа-версия нативной маковской собственной IDE от RemObjects (Project Fire).
Автор: V1s1ter
Дата сообщения: 03.03.2014 16:33
Всем добрым людям
Собрался переходить с Delphi 2007 на Delphi XE5. Специфические нововведения касательно Android и iOS пока не интересуют.
Однако очень хочется знать, где можно почитать об изменениях в самом языке и изменениях среды в контексте программирования под Windows. В идеале подошла бы статейка или набор статей по этому поводу, но можно и толстую книжку. Помогите сэкономить на поиск нужного.

Добавлено:
В догонку. Интересуют изменения во всех версиях 2007->2010->XE->XE2->XE3->XE4->XE5 или полный набор изменений 2007->XE5.
Автор: HeMet
Дата сообщения: 03.03.2014 17:46

Цитата:
Выводы: первое - готовится что-то, позволяющее иметь .NET RTL на OSX/ (iOS?).

Наверное, всё-таки, без (w/o - without).
Автор: Alexey_Gawrilow
Дата сообщения: 03.03.2014 18:21
V1s1ter

Цитата:
Интересуют изменения во всех версиях 2007->2010->XE->XE2->XE3->XE4->XE5 или полный набор изменений 2007->XE5.


http://www.tindex.net/Language/
Автор: Alexzzy
Дата сообщения: 03.03.2014 19:11
V1s1ter
Если надо переводить проекты, то главное это переход на 2009, а именно на Unicode. Наилучшая информация это Marco Cantu - Delphi 2009 Handbook.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

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


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