Перейти к содержанию
  • Регистрация

Рекомендуемые сообщения

Выходит ошибка (если смотреть дебагером): raised exception class EInvalidCast with message 'Invalid class typecast' при втором вызове процедуры отрисовки маршрута (в MapView1MapClick).

 
          // удаляем старые
          if Assigned(myTapMarker) then
            myTapMarker.Remove;
          if Assigned(myPolyLine) then
            myPolyLine.Remove; // <- вот тут, когда myPolyLine не nil

 

По F7 выяснилось что ошибка происходит в модуле FMX.Maps.Android:

procedure TAndroidMapPolyline.Remove;
begin
  inherited;
  TUIThreadCaller.InvokeIfNotNil<JPolyline>(procedure (P: JPolyline) begin
      P.remove;
    end, FJavaPolyline);
  FMapView.RemoveMapObject(JStringToString(FJavaPolyline.getId)); // <- здесь
end;

Отчего это?

какая делфи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а пример можно как на Delphi 10 Seattle использовать? а то на Delphi XE8 было и все работала а тут что то непонятно

заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что именно не понятно?

1) создаём

mEngine := TMapsEngine.Create;

2) указываем что будем использовать

mEngine.SetOptionsYandex(''); 
mEngine.SetOptionsGoogle(GoogleAPI);
mEngine.SetOptionsHere(HereAPI, HereAPP);

3) получаем данные по координатам

mEngine.Geocoding(myCoordLoc, myGeoLoc);

4) получаем координаты по адресу

mEngine.GeocodingReverse(myGeoLoc, myCoordLoc);

5) отрисовать маршрут

mEngine.SetOptionsGoogleDistance(GoogleDistance); // тут !!distance!! api_key google
mEngine.GoogleDistance(myCoordLoc, myCoordTap, myRoutePoints, myRouteInfo); // данные о маршруте

Примера нет, т.к. я уже им не пользуюсь (из-за android 6.0, в нём нет поддержки open-ssl на которых работает indy)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примера нет, т.к. я уже им не пользуюсь (из-за android 6.0, в нём нет поддержки open-ssl на которых работает indy)

Можно узнать подробности про отсутствие open-ssl в android 6? Indy компоненты нельзя будет использовать? Как тогда быть если нужен SSL?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Примера нет, т.к. я уже им не пользуюсь (из-за android 6.0, в нём нет поддержки open-ssl на которых работает indy)

Можно узнать подробности про отсутствие open-ssl в android 6? Indy компоненты нельзя будет использовать? Как тогда быть если нужен SSL?

 

вот тут обсуждалось

я решил проблему через сервер, на php пишу всё что нужно (геокодинг, дистанцию и прочие ssl запросы)

получаю уже сформированный json и кстати так намного удобней и правильней

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это нужен отдельный сервер, что не очень то хорошо. Печаль :(

Кодом на php поделитесь? :)

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это нужен отдельный сервер, что не очень то хорошо. Печаль :(

у нас есть :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://indy.fulgan.com/ZIP/SSL.zip а вы пробовали эту скачать?

ссылка не рабочая

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работает, просит ввести  Enter above text.

Изменено пользователем GASCHE

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получается, что этот компонент использовать уже нельзя (из-за Android 6)?

Или все же можно, если использовать https://indy.fulgan.com/ZIP/SSL.zip ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

У меня ведь работает, смотрите что то не так указали. Может местами поменяли

Сегодня начал определять адрес через HERE (код не менял) :)

Кстати вчера вечером программа повисла когда я сел в автобус (несколько раз нажимал Подождать, но программа не очнулась). Возможно дело в том что интернет на телефоне очень слабый (GPRS).

 

 

 

А можно этот компонент установить в С++ Builder?

Вам просто нужно добавить MapsEngine.pas (предварительно убрав точку в названии файла) в свой проект: Project -> Add to project

При компиляции C++Builder сам создаст заголовочный файл MapsEngine.hpp, делаете #include "MapsEngine.hpp" и сможете использовать класс TMapsEngine.

 

PS. А лучше переходите на Delphi, народу больше на нем сидит  :P

 

 

PPS. А сейчас у Абракадабры идет вебинар по использованию TMapView (зарегистрироваться не успел). Кто-нибудь знает этот вебинар потом можно будет где-то посмотреть?

 

А можете подсказать как его использовать в Builder XE8 ?

Не могу понять, как:

1) создаём

mEngine := TMapsEngine.Create;

2) указываем что будем использовать

mEngine.SetOptionsYandex('');

mEngine.SetOptionsGoogle(GoogleAPI);

mEngine.SetOptionsHere(HereAPI, HereAPP);

3) получаем данные по координатам

mEngine.Geocoding(myCoordLoc, myGeoLoc);

4) получаем координаты по адресу

mEngine.GeocodingReverse(myGeoLoc, myCoordLoc);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получается, что этот компонент использовать уже нельзя (из-за Android 6)?

Или все же можно, если использовать https://indy.fulgan.com/ZIP/SSL.zip ?

да, на андроид 6.0 не выйдет. нужно ждать пока индейцы допилят до boringSSL

 

 

А можете подсказать как его использовать в Builder XE8 ?

 

Не могу понять, как:

1) создаём

mEngine := TMapsEngine.Create;

2) указываем что будем использовать

mEngine.SetOptionsYandex('');

mEngine.SetOptionsGoogle(GoogleAPI);

mEngine.SetOptionsHere(HereAPI, HereAPP);

3) получаем данные по координатам

mEngine.Geocoding(myCoordLoc, myGeoLoc);

4) получаем координаты по адресу

mEngine.GeocodingReverse(myGeoLoc, myCoordLoc);

и собственно вопрос, что не понятно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 02.11.2015 в 10:59, Rusland сказал:

Отчего это?

Посмотрел описание класса

https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polyline#developer-guide

Может getId в вашем случае не JString возвращает?

И я Java не очень знаю, но метод все-таки со скобками лучше вызывать, а не как свойство.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В Berlin проблема 'Invalid class typecast' осталась (хоть при этом программа продолжает работать).

          if Assigned(myPolyLine) then
            myPolyLine.Remove;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1

 

 

Maps.Engine.zip

Изменено пользователем aleksandrguru

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 часов назад, aleksandrguru сказал:

Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1

Maps.Engine.zip

Благодарю, все руки не доходили выложить исправленную версию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, aleksandrguru сказал:

Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1

 

 

Maps.Engine.zip

А от IdURI избавиться не удалось?

Str := TIdURI.URLEncode(Format(GoogleURLGeoReverse, [GetFormattedString(aData), aGoogleKey]));

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, Rusland сказал:

А от IdURI избавиться не удалось?


Str := TIdURI.URLEncode(Format(GoogleURLGeoReverse, [GetFormattedString(aData), aGoogleKey]));

 

использовать 

//uses System.NetEncoding
TNetEncoding.URL.Encode()

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 18.08.2015 в 11:25, Равиль Зарипов (ZuBy) сказал:

Компонент TMapsEngine

 

Возможности

  • Нативный LocationSensor [ANDROID]
  • Геокодинг/Реверс геокодинг через Google API, Yandex API, Here Maps API
  • Построение маршрута через Google Distance API
  • Расчет дистанции по прямой
  • Совместим со стандартным компонентом TLocationSensor

 

Видео демонстрация

 

На видео видно как TMapView косячик с миллионом точек, приложение зависло при отрисовке, но с этим ничего не поделать.

Без синхронизации не возможно отрисовать все точки

 

Исходник

TMapsEngine_source.zip

TMapsEngine_Seattle_10.zip

 

Скачать APK  (долго он там не пролежит, а форум не позволяет загрузить zip размером 7,4 мб )

 

Подскажите а компонент только с Android работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
54 минуты назад, Anasazi сказал:

Подскажите а компонент только с Android работает?

без привязки к платформе, т.к. он работает с апи yandex и google

а выводить можно куда захотите, я выводил на TMapView для мобильных, на Windows можно использовать какой-нить другой компонент

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Воспользовался компонентом mEngine, при написании запускал на Lenovo все работало нормально, перенес на планшетник, все вроде работает

только не геокодирует по координатам mEngine.Geocoding адрес не возвращает (при этом на ленове тут же все нормально показывает)

не подскажете куда копать (проблема еще в том что планшет не могу подключить для отладки) 

procedure TMasterDetailForm.OnLocationChange(Sender: TObject; const OldLocation,
  NewLocation: TLocationCoord2D);
begin
  TThread.Synchronize(nil,
    procedure
    begin
      // перемещаемся по карте в текущие координаты, с зумом 14 (макс 16)
      myLoc := TMapCoordinate.Create(NewLocation.latitude, NewLocation.longitude);
      MapView1.Location := myLoc;
      MapView1.Zoom := 17;

      TTask.Run(
        procedure
        begin
          // геолокация
          mEngine.Geocoding(myLoc, myLocInfo); // геокодинг для записи заголовка в marker

          TThread.Synchronize(nil,
            procedure
            var
              markDescriptor: TMapMarkerDescriptor;
            begin
              // MyLocInfo хранит все данные геокодинга
              Label6.Text := myLocInfo.FormattedAddress;
              Label6.Text := Label6.Text+ ' -> '+KlLocInfo.FormattedAddress;
              markDescriptor := TMapMarkerDescriptor.Create(myLoc, myLocInfo.FormattedAddress);
              SetMarker(MapView1,myLoc,1,'',markDescriptor);
            end);
        end);
    end);
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ZuBy есть source для Seattle 10? А то там только Maps.Engine.pas, а он чуток отличается от TMapsEngine_source.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Долго бился над Maps.Engine.pas не работает. Потом понял, это походу из-за того что всё теперь в json https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY,

a не 'https://maps.googleapis.com/maps/api/geocode/xml?latlng=%s,%s&key=%s'  ну и остальное значит в другом формате, либо у меня руки не из того места...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Женя
      В визуал студии в Xamarin есть такой класс -Java.Security.KeyStore Class, этот класс(как я понял) отвечает за подключение к хранилищу ключей  андроида,короче говоря Android keystore system .
      А вот как  достучаться до этой функции  в с++builder ?Я хочу сделать привязку  приложения  через  Android keystore system ,а как это сделать в Rad  студии не знаю
    • От Mohamed BEN AMMAR
      hello 
      i'm using delphi fmx for building android App
      i have this code for Activating The WI-FI icon from android device:
      This could be found here .
      =========== code ==================
      uses
        Androidapi.Helpers,
        Androidapi.JNI.JavaTypes,
        Androidapi.JNI.GraphicsContentViewText,
        Androidapi.JNIBridge,
        Androidapi.JNI.WifiManager;
        procedure SetWifiEnabled (AEnable: Boolean); var   Obj: JObject;   WifiManager: JWifiManager; begin   Obj: = SharedActivityContext.getSystemService (TJContext.JavaClass.WIFI_SERVICE);   if Obj = nil then     Exit;     WifiManager: = TJWifiManager.Wrap ((Obj as ILocalObject) .GetObjectID);   WifiManager.setWifiEnabled (AEnable); end; 
       
       My question is About Activating Android location:
        Is it possible to activate the service location icon from android device
       programatically without using the Location or TLocationSensor component ....?
      however I know exactly that google has been Deactivate this API since android "4" just for security reasons .....
      but i have seen many apps in playstore can activate the service without using 
      this code here ask the user for activate the location manually .... procedure TForm1.GPSSettings; {$IFDEF ANDROID} var Intent: JIntent; {$ENDIF} begin {$IFDEF ANDROID} Intent := TJIntent.Create; Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); {$ENDIF} end; in other versions like lolipopup can show just the Allow Permission system dialog timer ....( Asking the user for Allowing this App to Activate the service location ......) 
      I have an android device with lolipopup version and i try to execute the location EMBARCADERO sample but 
      this one can not activate the service location ICON even  my device show me the Allow permission dialog where i choose yes allow
      with never ASK....
      Finally ,  I like the WI-FI code above .....
      and i'm wondering if someone here can do this task for me (i need a unit as the WI-FI code above which can offer me
      the option to activate the Service Location ICON )
      I'm ready to paid for that task .....
       
      Sincerelly: Brave.
    • От Денис Демин
      Здравствуйте, есть такая задача:
      1) Необходимо вставить карту от Яндекса на форму.
      2) Необходимо вставить информацию текстовую (информация о доставке или оплате), это можно также вставить HTML кодом, а лучше просто отформатированным содержанием. 
      Заранее спасибо всем за ответы.
    • От AliZairov
      Здравствуйте. Кто-нибудь использует схему instagram api? Dev instagram Хотя я и сделал эксперименты, результат, к сожалению, не очень хороший.
      function getCode: string; begin FRequest.Method := TRESTRequestMethod.rmGET; FRequest.Resource := '/oauth/authorize/'; FRequest.AddParameter('client_id', client_id, TRESTRequestParameterKind.pkGETorPOST); FRequest.AddParameter('redirect_uri', URIEncode(redirect_uri), TRESTRequestParameterKind.pkGETorPOST); FRequest.AddParameter('response_type', 'code', TRESTRequestParameterKind.pkGETorPOST); FRequest.Execute; FRequest.Response.GetSimpleValue('code', Result); end; Проблема заключается в перенаправленном URL-адресе.
      http://your-redirect-uri?code=CODE
    • От AliZairov
      Привет. Я сделал новую версию YouTubeApi компоненты. Поддерживаемые VCL & FMX + Mobile.
      Никаких официальных YouTube Api компоненты. Только данные с парсинг. Пример доступен в архиве.
       
      Новый
      ===
      v1.4 - 25/02/2018
        + Устранение проблем
      YouTubeApiDelphi
    • От FREEFAR
      Доброе время суток!
      Раньше все манипуляции с отображением геолокации и картами делал непосредственно в WebBrowser через api yandex.
      Сейчас обратил внимание на TmapView но ума не приложу как в нем построить маршрут между двумя и более точками? Направьте пжл ибо в интернете инфо не вижу... И возможно ли вообще это? Видео от ZuBy смотрел но не разобрался с его компонентой ибо не особо силен... Буду очень признателен. Может где пример есть подобной реализации , думаю сам допру дальше 
    • От ivadimos
      Пытаюсь опубликовать приложение в Гугл маркет.
      Присылают ответ на почту.

      OpenSSL
      The vulnerabilities were addressed in OpenSSL 1.02f/1.01r. To confirm your OpenSSL version, you can do a grep search for:
      $ unzip -p YourApp.apk | strings | grep "OpenSSL"
      You can find more information and next steps in this Google Help Center article.
      Но ведь я не использую никакой работы с сетью и т.д, только firedac и sqlite
    • От Равиль Зарипов (ZuBy)
      Доброго времени суток!
      Навеяно этой темой.
      Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
      Решил собрать аналогичный пример, только не использовать TREST***
      немного опишу, свою реализацию
      uAppSettings.pas - хранит описание вашего приложения созданного в ВК  FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст
      var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы
      var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
      GitHub   TRESTLight.zip
    • От Pax Beach
      Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса.
      Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp".
      Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества.
      Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools).
       
      uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.  
    • От magicxor
      Добрый день.
      Как использовать API WindowsRT для шифрования? (https://msdn.microsoft.com/en-us/library/windows/apps/windows.security.cryptography.core.aspx)
      Конкретно - интересует RSA, генерация пары ключей, импорт/экспорт в файл, шифрование и дешифрование строки.
      Для начала я пытаюсь просто получить названия алгоритмов шифрования, чтоб потом их использовать. Даже не возвращаю их пока из функции, просто получаю:
       
      uses System.Threading, System.Types, System.Win.ComObj, Winapi.Security.Cryptography, Winapi.Foundation, Winapi.Foundation.Collections, Winapi.Storage.Streams, Winapi.CommonTypes, Winapi.Foundation.Types, Winapi.Winrt, System.Win.Winrt; procedure TForm1.Button1Click(Sender: TObject); var AsymmetricAlgoNames: Core_IAsymmetricAlgorithmNamesStatics; AsymmetricAlgoNamesInsp: IInspectable; GetAlgoNames: IFuture<boolean>; begin GetAlgoNames := TTask.Future<boolean>( function: boolean begin OleCheck(RoInitialize(RO_INIT_MULTITHREADED)); try OleCheck(RoGetActivationFactory(TWindowsString(SCore_AsymmetricAlgorithmNames), Core_IAsymmetricAlgorithmNamesStatics, AsymmetricAlgoNamesInsp)); AsymmetricAlgoNames := AsymmetricAlgoNamesInsp as Core_IAsymmetricAlgorithmNamesStatics; finally RoUninitialize; end; Result := true; end); GetAlgoNames.Start; end;  
      После нажатия на кнопку:
      И сразу:
      Но иногда (рандомно) вместо первого исключения получаю:
       
      IFuture использую потому что если это делать в потоке гуя, при вызове RoInitialize ругается, что поток уже запущен и нельзя изменить его состояние.
      Delphi 10 Seattle, Windows 10 x64.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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