Перейти к содержанию
Fire Monkey от А до Я

rareMax

Пользователи
  • Постов

    553
  • Зарегистрирован

  • Посещение

  • Победитель дней

    35

Сообщения, опубликованные rareMax

  1. Добрый день. Хочу узнать как правильно возвращать объекты в функции, что бы не было утечки памяти. Данная проблема на данный момент воспроизводится в проекте TelegaPI. Ниже упрощенный код с проекта для запросов на сервер:

    function TTelegramBot.API<T>(const Method: String;
      Parameters: TDictionary<String, TValue>): T;
    var
      lHttp: THTTPClient;
      lHttpResponse: IHTTPResponse;
      lApiResponse: TtgApiResponse<T>;
      lURL_TELEG: String;
    begin
      lHttp := THTTPClient.Create;
      try
        lURL_TELEG := 'https://api.telegram.org/bot' + FToken + '/' + Method;
        // Преобразовуем параметры в строку, если нужно
        if Assigned(Parameters) then
          lHttpResponse := lHttp.Post(lURL_TELEG, ParamsToFormData(Parameters))
        else
          lHttpResponse := lHttp.Get(lURL_TELEG);
        lApiResponse := TtgApiResponse<T>.FromJSON(lHttpResponse.ContentAsString);
        Result := lApiResponse.ResultObject;
      finally
        FreeAndNil(lHttp);
        { Ниже утечка памяти. Если расскоментировать - тогда не будет возращаться
          результат функций }
        // if Assigned(lApiResponse) then
        // lApiResponse.Free;
      end;
    end;

    В таком виде не освобождается lApiResponse - в результате утечка памяти. Если раскоментировать 2 последние строки - тогда в результате функции будет пустой объект. Прошу опытных людей в этом плане рассказать что мне нужно подправить. Спасибо.

  2. 16 часов назад, Kitty сказал:

    А в C++ Builder это установить можно?

     

    Не знаю - поидее можно вручную в своствах проекта указать генерацию заголовочников для плюсов, но сам не полюзуюсь - так что хз

    52 минуты назад, Pax Beach сказал:

    Возможности этого компонента есть в базовых библиотеках Embarcadero.

    Или чего-то нет?

     

    скорее это альтернативная замена родных библиотек+некотороые дополнительные классы.

    23 минуты назад, Axbor сказал:

    Ничего не понял! Для чего это, зачем мне это? Плюсы минусы...

    Я же вас не заставляю ее использовать. плюсы минусы каждый определяет каждый для себя после работы с ней. 

  3. В общем рабочее время подходит к концу - поэтому держи:

    Function SampleSendFile(Const Url, FileName: String): Boolean;
    var
      lHttp: THTTPClient;
      lSendData: TMultipartFormData;
      lResponse: IHTTPResponse;
    Begin
      lHttp := THTTPClient.Create;
      lSendData := TMultipartFormData.Create;
      try
        lSendData.AddFile('FileField', FileName);
        lResponse := lHttp.Post(Url, lSendData);
        Result := lResponse.StatusCode = 200;
      finally
        lSendData.Free;
        lHttp.Free;
      end;
    End;

     

  4. 3496466100-Spring4D medium.png

    Spring4D это библиотека с открытым исходным кодом для Embarcadero Delphi 2010 and higher. It consists of a number of different modules that contain a base class library (common types, interface based collection types, reflection extensions) and a dependency injection framework. It uses the Apache License 2.0.

    Присоединяйтесь в Spring4D Google Group.

    Installation

    Запустите Build.exe, выберите нужные опции и установите

    Текущая версия

    1.2

    Известные ошибки

    Иногда могут показываться ошибки компилятора на мобильных платформах (iOS ARM и Android).

    Автор: Stefan Glienke

    Скачать: git clone https://bitbucket.org/sglienke/spring4d.git

                   zip https://bitbucket.org/sglienke/spring4d/downloads

     

     

  5. procedure TForm4.Button1Click(Sender: TObject);
    Var
      LMediaTime: TTimeSpan;
    begin
      // Заполняем TTimeSpan
      LMediaTime := TTimeSpan.Create(MediaPlayer1.CurrentTime);
      // Выводим инфу в заголовок формы
      Caption := string.Join(':', [LMediaTime.Minutes, LMediaTime.Seconds,
        LMediaTime.Milliseconds]);
    end;
    
    procedure TForm4.FormCreate(Sender: TObject);
    begin
      // Загружаем медиафайл
      MediaPlayer1.FileName :=
        'C:\Users\Public\Music\Sample Music\Maid with the Flaxen Hair.mp3';
      // Воспроизводим его
      MediaPlayer1.Play;
    end;

     

×
×
  • Создать...