-
Постов
553 -
Зарегистрирован
-
Посещение
-
Победитель дней
35
Сообщения, опубликованные rareMax
-
-
-
Уверен что в этом участке кода ошибка вылетает?
-
-
8 минут назад, MrMG сказал:
скачивает некий прайс лист
Скачивание асинхронное у вас?
-
-
Добрый день. Хочу узнать как правильно возвращать объекты в функции, что бы не было утечки памяти. Данная проблема на данный момент воспроизводится в проекте 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 последние строки - тогда в результате функции будет пустой объект. Прошу опытных людей в этом плане рассказать что мне нужно подправить. Спасибо.
-
ReportMemoryLeaksOnShutdown := true;
-
В качестве <T> может быть как класс так и простые типы. То есть сделать что то типа
Type TtgApiResponse<T:Class>=Class ...
немогу. Поэтому прошу показать как можно воспользоваться Assign"ами
-
Есть код:
lApiResponse := TtgApiResponse<T>.Create(Param); try Result := lApiResponse.ResultObject; finally lApiResponse.Free; end;
В таком виде в Result просто передается указатель на lApiResponse.ResultObject.
А вот как можно скопировать lApiResponse.ResultObject в Result ?
-
https://www.embarcadero.com/ru/free-tools/ccompiler
По ссылке бесплатный компилятор для С++. Функциональность
нетограничена. Компилятор только для Вин32. В общем кто работает с С++ - ознакомьтесь -
Пример скачивания файла в демке смотрели?
-
-
16 часов назад, Kitty сказал:
А в C++ Builder это установить можно?
Не знаю - поидее можно вручную в своствах проекта указать генерацию заголовочников для плюсов, но сам не полюзуюсь - так что хз
52 минуты назад, Pax Beach сказал:Возможности этого компонента есть в базовых библиотеках Embarcadero.
Или чего-то нет?
скорее это альтернативная замена родных библиотек+некотороые дополнительные классы.
23 минуты назад, Axbor сказал:Ничего не понял! Для чего это, зачем мне это? Плюсы минусы...
Я же вас не заставляю ее использовать. плюсы минусы каждый определяет каждый для себя после работы с ней.
-
В общем рабочее время подходит к концу - поэтому держи:
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;
-
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
-
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;
-
3 минуты назад, antarey сказал:
Axbor , TNetHTTPClient не требует библиотек опен ссл?
нет
-
Задам вопрос чуть с другой стороны - с андроида тоже пишет за устаревший браузер?
-
Если Вам только под десктопы надо - то сабж решается через реестр винды.
-
TTimeSpan - попробуй его
-
-
Можете еще попробовать связаться с тем пользователем и дать ему попробовать запустить софт, собранный в дебаг-режиме. Возможно более конкретная ошибка вылезет
-
Можете скинуть линк на софт? Данная ошибка только у одного пользователя появляется?
-
Аналог IStream для FMX
в DLL
Опубликовано
так то длл чисто виндовая(
реактОс"овая) фишка. Надеюсь вы же не собираетесь плагины для всех осей делать?