Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
Топик располагается на нескольких страницах: 1 2 [все] |
Sergey_rb Member Откуда: Сообщений: 956 |
Delphi 8 (RAD) Не работает try except на Андроиде 7.0 При возникновении ошибки приложение вылетает без сообщения. Есть какие-то варианты ловить ошибку на Андроиде? |
19 фев 21, 11:51 [22283351] Ответить | Цитировать Сообщить модератору |
Kazantsev Alexey Member Откуда: Сообщений: 4987 |
Sergey_rb, Какое исключение-то? Если аппаратное, то смотрти доку. |
19 фев 21, 11:58 [22283358] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Вот такое исключениеtry INI := TINIFile.Create('test.ini'); except on e: exception do ShowMessage(e.Message); end; |
19 фев 21, 12:18 [22283373] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
Kazantsev Alexey, Интересно что им помешало сделать невидимый фиктивный вызов функции внутри try/except на анроиде? |
19 фев 21, 12:20 [22283377] Ответить | Цитировать Сообщить модератору |
Kazantsev Alexey Member Откуда: Сообщений: 4987 |
Класc какой?
Видимо то же, что помешало и оптимизации ллвм'овские использовать. Это, кстати, не только ведроида касается, а вообще всех некстгенов. |
||||||||
19 фев 21, 12:26 [22283382] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Класс TINIFile |
||||||||||||
19 фев 21, 12:27 [22283384] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Чтобы на Дельфи не писали, а переходили на Андроид студию. |
||||
19 фев 21, 12:28 [22283386] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
Ну оптимизации могут в теории и всякие сбои давать. Да и и так не высокую скорость работы компилятора снизить. Могли это на потом оставить. Это все не столь важно, в общем. А вот ненадежная работа try/except это явная и заведомая ошибка архитектора. Сообщение было отредактировано: 19 фев 21, 12:28 |
||||
19 фев 21, 12:32 [22283394] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Говорят, что до версии ведроида 6.0 try/except работал, значит умышленно убрали. |
19 фев 21, 12:35 [22283397] Ответить | Цитировать Сообщить модератору |
Kazantsev Alexey Member Откуда: Сообщений: 4987 |
Класс исключения.
К слову, ни Oxygene, ни FPC c LLVM бэкендом такие исключения тоже не перехватывают, но в FPC эта задача значится в списке. |
||||||||
19 фев 21, 12:56 [22283417] Ответить | Цитировать Сообщить модератору |
Kazantsev Alexey Member Откуда: Сообщений: 4987 |
https://stackoverflow.com/questions/38243473/exception-handling-broken-in-delphi-xe8-android |
||||
19 фев 21, 12:59 [22283422] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
Kazantsev Alexey, Типа в 10.4 пофиксили? |
19 фев 21, 13:09 [22283434] Ответить | Цитировать Сообщить модератору |
Kazantsev Alexey Member Откуда: Сообщений: 4987 |
Не, там о другом. |
||||
19 фев 21, 13:16 [22283440] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
В общем надо решать вопрос, на чем писать для терминала сбора данных для Андроида. |
19 фев 21, 13:48 [22283486] Ответить | Цитировать Сообщить модератору |
asutp2 Member Откуда: Тюмень Сообщений: 729 |
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Migrating_Delphi_Code_to_Mobile_from_Desktop раздел Use a Function Call in a try-except Block to Prevent Uncaught Hardware Exceptions т.е. вместо try INI := TINIFile.Create('test.ini'); except on e: exception do ShowMessage(e.Message); end; делаешь procedure T; begin INI := TINIFile.Create('test.ini'); end; try T; except on e: exception do ShowMessage(e.Message); end; |
19 фев 21, 15:17 [22283534] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
asutp2, Не прокатило, вылетел без сообщений procedure TForm1.btnOkClick(Sender: TObject); begin try LoadINI; except on e: exception do ShowMessage(e.Message); end; end; procedure TForm1.LoadINI; var INI: TINIFile; begin INI := TINIFile.Create('test.ini'); end; Сообщение было отредактировано: 19 фев 21, 16:00 |
19 фев 21, 15:32 [22283546] Ответить | Цитировать Сообщить модератору |
asutp2 Member Откуда: Тюмень Сообщений: 729 |
Sergey_rb, отучитесь на андроиде использовать ShowMessage |
19 фев 21, 15:49 [22283554] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Почему? Сам по себе ShowMessage работает. |
||||
19 фев 21, 16:01 [22283563] Ответить | Цитировать Сообщить модератору |
inbox Member [заблокирован] Откуда: Сообщений: 17 |
Я бы запустил проект под отладкой, и посмотрел почему не срабатывает исключение. Без отладки вообще нечего делать, это как тыкать писей в пруд(Может поймаешь рыбку). Сообщение было отредактировано: 19 фев 21, 15:55 |
19 фев 21, 16:02 [22283564] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Исключение не срабатывает из-за версий Delphi и Android. |
||||
19 фев 21, 16:06 [22283569] Ответить | Цитировать Сообщить модератору |
Kast2K Member Откуда: Санкт-Петербург Сообщений: 520 |
попробуйте так uses FMX.Helpers.Android; procedure TTestForm.ShowInformationMessage(const AText: string); CallInUiThread ( procedure begin TJToast.JavaClass.makeText (TAndroidHelper.Context, StrToJCharSequence(AText), TJToast.JavaClass.LENGTH_LONG).show; end ); end; Сообщение было отредактировано: 19 фев 21, 16:27 |
19 фев 21, 16:31 [22283588] Ответить | Цитировать Сообщить модератору |
asutp2 Member Откуда: Тюмень Сообщений: 729 |
Sergey_rb, а кстати, какая именно версия делфи используется?) |
19 фев 21, 16:33 [22283590] Ответить | Цитировать Сообщить модератору |
inbox Member [заблокирован] Откуда: Сообщений: 17 |
Что такое исключение ? Давайте разберёмся для начало в этом. Простой пример uses System.SysUtils; begin try Raise Exception.Create('Test Exception'); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. Отладчик говорит Project1.dpr.11: Raise Exception.Create('Test Exception'); 0041E5A4 B940E64100 mov ecx,$0041e640 0041E5A9 B201 mov dl,$01 0041E5AB A130344100 mov eax,[$00413430] 0041E5B0 E847AAFFFF call Exception.Create 0041E5B5 E84A85FEFF call @RaiseExcept То есть, создаётся класс, и вызывается RaiseExcept По сути, нам надо отследить, что происходит при вызове procedure _RaiseAtExcept(Obj: TObject; Address: Pointer); var Params: Array[0..6] of NativeUInt; ExceptionRecord: TExceptionRecord; //CurRaiseFrame: PRaiseFrame; begin if Obj = nil then _RunError(216); // reAccessViolation Params[0] := UIntPtr(Address); Params[1] := UIntPtr(Pointer(Obj)); Params[2] := 0 {EBX}; Params[3] := 0 {ESI}; Params[4] := 0 {EDI}; Params[5] := 0 {EBP}; Params[6] := 0 {ESP}; if RaiseExceptObjProc <> nil then begin //CurRaiseFrame := RaiseListPtr; ExceptionRecord.ExceptionCode := cDelphiException; ExceptionRecord.ExceptionFlags := cNonContinuable; ExceptionRecord.ExceptionRecord := nil; // if CurRaiseFrame <> nil then // ExceptionRecord.ExceptionRecord := CurRaiseFrame^.ExceptionRecord; ExceptionRecord.ExceptionAddress := Address; ExceptionRecord.NumberParameters := 7; ExceptionRecord.ExceptionInformation[0] := Params[0]; ExceptionRecord.ExceptionInformation[1] := Params[1]; ExceptionRecord.ExceptionInformation[2] := Params[2]; ExceptionRecord.ExceptionInformation[3] := Params[3]; ExceptionRecord.ExceptionInformation[4] := Params[4]; ExceptionRecord.ExceptionInformation[5] := Params[5]; ExceptionRecord.ExceptionInformation[6] := Params[6]; TRaiseExceptObjProc(RaiseExceptObjProc)(@ExceptionRecord); end; RaiseExceptionProc(cDelphiException, cNonContinuable, 7, @Params); end; |
||||
19 фев 21, 16:49 [22283601] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Delphi 8 Android 7.0 В первом посте написано... |
||||
19 фев 21, 16:52 [22283603] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
|
||||
19 фев 21, 16:55 [22283605] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
inbox, У меня есть подозрение, что на Андроиде код не доходит до Raise, вместо этого просто останавливается приложение. |
19 фев 21, 16:56 [22283606] Ответить | Цитировать Сообщить модератору |
asutp2 Member Откуда: Тюмень Сообщений: 729 |
Sergey_rb, что то я сильно сомневаюсь, что вы используете Delphi 8, которая была выпущена в декабре 2003 года и которая не поддерживает андроид в принципе)))) |
19 фев 21, 16:56 [22283607] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
А это интересный вариант, надо попробовать. |
||||
19 фев 21, 16:58 [22283609] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Прочитайте первое сообщение Delphi 8 от RAD Studio |
||||
19 фев 21, 16:59 [22283611] Ответить | Цитировать Сообщить модератору |
inbox Member [заблокирован] Откуда: Сообщений: 17 |
Он имел введу XE8 А вы как вцепились, лишь бы орнуть. |
19 фев 21, 17:01 [22283614] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
![]() |
||||
19 фев 21, 17:01 [22283615] Ответить | Цитировать Сообщить модератору |
inbox Member [заблокирован] Откуда: Сообщений: 17 |
rgreat, Хватит показывать свой низкий интеллект. |
19 фев 21, 17:02 [22283617] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
Даже если это XE8 - это древнее говно. Пусть ставит хотя бы XE 10.3 CE и тестит. |
||||
19 фев 21, 17:02 [22283619] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
|
||||
19 фев 21, 17:03 [22283622] Ответить | Цитировать Сообщить модератору |
asutp2 Member Откуда: Тюмень Сообщений: 729 |
Для справки, в XE8 нет поддержки Android 7 Нужно использовать как минимум 10.3.3 |
||||||||
19 фев 21, 17:04 [22283623] Ответить | Цитировать Сообщить модератору |
inbox Member [заблокирован] Откуда: Сообщений: 17 |
Он даже про Delphi 8 не в курсе. И не понимает вашего бессмысленного рофла. По этому, вы глумитесь над человеком который не смыслит на развитие Delphi. Для него 8 это XE8 |
||||||||
19 фев 21, 17:04 [22283625] Ответить | Цитировать Сообщить модератору |
inbox Member [заблокирован] Откуда: Сообщений: 17 |
По этому я могу по глумиться над вами, что будет более объективнее и имеет больше смысла. "ХА-ХАА, Во дают - отличить Delphi с Android от Delphi 2008 не омгут " |
||||
19 фев 21, 17:06 [22283627] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
У нас ситуация: "через рофлы к знаниям". |
||||
19 фев 21, 17:07 [22283629] Ответить | Цитировать Сообщить модератору |
Kazantsev Alexey Member Откуда: Сообщений: 4987 |
О, Няшик оттаял ![]() |
||||
19 фев 21, 17:10 [22283632] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6563 |
![]() |
||||
19 фев 21, 17:13 [22283634] Ответить | Цитировать Сообщить модератору |
inbox Member [заблокирован] Откуда: Сообщений: 17 |
Много девственниц в жертву принесли? Что бы узнать кто по ту сторону экрана. |
||||
19 фев 21, 17:15 [22283635] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Если у человека машина - десятка, то все знают что это ВАЗ-2110. |
19 фев 21, 17:18 [22283638] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
У меня сейчас вопрос выбора языка - Delphi или Java или, на крайний случай C#/С++. |
||||||||
19 фев 21, 17:21 [22283639] Ответить | Цитировать Сообщить модератору |
Мимопроходящий Member Откуда: бурятский тундрюк, эсквайр Сообщений: 31969 |
19.02.2021 17:21, Sergey_rb пишет: > У меня сейчас вопрос выбора языка - Delphi или Java или, на крайний случай C#/С++. бери Питон. Posted via ActualForum NNTP Server 1.5 |
19 фев 21, 17:24 [22283643] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Мимопроходящий, Проходите мимо... |
19 фев 21, 17:29 [22283648] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12572 |
|
||||||||
19 фев 21, 18:12 [22283683] Ответить | Цитировать Сообщить модератору |
ъъъъъ Member Откуда: Сообщений: 1769 |
Охренеть. |
||||
19 фев 21, 18:33 [22283694] Ответить | Цитировать Сообщить модератору |
Sergey_rb Member Откуда: Сообщений: 956 |
Для WinCe 6.0 писал на Лазаре, для WinCe 7.0 на Embedded C++. На чем писать под Андроид - пока вопрос. |
24 фев 21, 08:59 [22285463] Ответить | Цитировать Сообщить модератору |
Kazantsev Alexey Member Откуда: Сообщений: 4987 |
Sergey_rb, Для лазаря есть https://github.com/jmpessoa/lazandroidmodulewizard |
24 фев 21, 10:14 [22285487] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: 1 2 [все] |
Все форумы / Delphi | ![]() |