Arhn - архитектура программирования

ошибка сегментации tidssliohandlersocket в delphi xe7

Я создал и запустил приведенный ниже код как приложение для Android. Приложение работает ожидаемо, но при закрытии я получаю ошибку сегментации в обработчике TIdSSLIO. Компоненты Indy несовместимы с FireMonkey?

unit Main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, FMX.Layouts, FMX.Memo,
  FMX.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    http: TIdHTTP;
    ioSocket: TIdSSLIOHandlerSocketOpenSSL;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private

    LiServer:string;
    procedure DBCom(var retdata: TStringlist);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}

procedure TForm1.Button1Click(Sender: TObject);
var m: TMemoryStream;
    retdata: TStringList;
    i:integer;
begin
  m:=TMemoryStream.Create;

  //--- init data
  retdata:=TStringList.Create;
  retdata.Add('F=1');

  //--- add data
  retdata.Add('Data=1');

  //--- send data to server database
  DBCom(retdata);

  for i := 0 to retdata.Count-1 do
    memo1.Lines.Add(retdata[i]);

  //--- free allocated resources
  retdata.Free;
  m.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var m: TMemoryStream;
    retdata: TStringList;
    i:integer;
begin
  m:=TMemoryStream.Create;

  //--- init data
  retdata:=TStringList.Create;
  retdata.Add('F=1');

  //--- add data
  retdata.Add('Data=A');

  //--- send data to server database
  DBCom(retdata);

  for i := 0 to retdata.Count-1 do
    memo1.Lines.Add(retdata[i]);

  //--- free allocated resources
  retdata.Free;
  m.Free;
end;

//============ communication with DB
procedure TForm1.DBCom(var retdata:TStringlist);
var m: TMemoryStream;
    errcode,i,msgid,status,id:Integer;
begin
  m:=TMemoryStream.Create;

  //--- send data to server database
  http.Post(LiServer, retdata, m);
  m.Position:=0;
  retdata.LoadFromStream(m);

  //--- free allocated resources
  m.Free;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  LiServer:='http://server.com/url.php';
end;

end.

Ошибка возникает в этой процедуре в строке SSL_CTX_free(fContext).

procedure TIdSSLContext.DestroyContext;
begin
  if fContext <> nil then begin
    SSL_CTX_free(fContext);
    fContext := nil;
  end;
end;

  • Indy совместим с FireMonkey и прекрасно с ним работает. Даже Embarcadero использует Indy в своих кроссплатформенных технологиях. Что на самом деле говорит сообщение об ошибке? Как выглядит стек вызовов при возникновении ошибки? Я подозреваю, что вы можете столкнуться со следующей проблемой: AV в TIdStack.DecUsage () в Android 4.4.x 17.11.2014
  • Спасибо за информацию. Тогда я знаю, что безопасно продолжать использовать компоненты Indy. Я обновил свой пост, указав, где я получаю ошибку сегментации. 18.11.2014

Ответы:


1

@Remy Lebeau дал мне ответ, который я искал в примечании выше.

18.11.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..