IgorPI
@IgorPI

Как определить из-за чего возникает исключение?

Коллеги, добрый день!

Возникло неприятное исключение, нет не какого описания и не ошибка доступа к памяти.
Просто raise и всё тут
Код выполняется в той хронологии, в которой я изложил суть вопроса

MKNextPage - это обработчик события.

procedure TMainForm.MKNextPage(Sender: TObject; ACountPages,
  ACurrentPage: Integer);
begin
 success(Format('%d из %d', [ACurrentPage, ACountPages]));
end;


procedure TMainForm.success(msg: string);
var
  js: string;
begin
  try
    CoInitialize(nil);
    js := Format('this.success("%s")', [msg]);
    MainForm.WbLog.EvaluateJavaScript(js);
  finally
    CoUninitialize;
  end;
end;

WbLog - это браузер (FMX)

Код, где генерируется это исключение.
spoiler

procedure TDelegatedOleControl.CreateControl;
var
  Stream: IStream;
  CS: IOleClientSite;
  X: Integer;
begin
  FOleControl := nil;
  if FOleControl = nil then
    try
      try  // work around ATL bug
        X := FOleObject.GetClientSite(CS);
      except
        X := -1;
      end;
      if (X <> 0) or (CS = nil) then
        OleCheck(FOleObject.SetClientSite(Self));
      if (FObjectData = 0) and Assigned(FPersistStream) then
        OleCheck(FPersistStream.InitNew)
      else
      begin
        OleCheck(CreateStreamOnHGlobal(FObjectData, False, Stream));
        OleCheck(FPersistStream.Load(Stream));
        DestroyStorage;
      end;
      OleCheck(FOleObject.QueryInterface(IOleControl, FOleControl));
      FControlInfo.cb := SizeOf(FControlInfo);
      FOleControl.GetControlInfo(FControlInfo);
      OleCheck(FOleObject.QueryInterface(IDispatch, FControlDispatch));
      InterfaceConnect(FOleObject, IPropertyNotifySink, Self, FPropConnection);
      InterfaceConnect(FOleObject, FControlData^.EventIID, FEventDispatch, FEventsConnection);
{
      if FControlData^.Flags then
        OnChanged(DISPID_BACKCOLOR);
      if FControlData^.Flags and cfEnabled <> 0 then
        OnChanged(DISPID_ENABLED);
      if FControlData^.Flags and cfFont <> 0 then
        OnChanged(DISPID_FONT);
      if FControlData^.Flags and cfForeColor <> 0 then
        OnChanged(DISPID_FORECOLOR);
}
      FOleControl.OnAmbientPropertyChange(DISPID_UNKNOWN);
      RequestNewObjectLayout;
    except
      DestroyControl;
      raise;
    end;
end;



Небольшая поправочка, событие генерирую из асинхронной функции класса THttpClient!
Вот отсюда ноги растут
procedure TMKSearch.ASyncResult(const ASyncResult: IAsyncResult);
var
 Ss: TStringStream;
begin
  try
    Ss := TStringStream.Create('', TEncoding.UTF8);
    Ss.LoadFromStream(THTTPClient.EndAsyncHTTP(ASyncResult).ContentStream);
    Ss.SaveToFile('debug.html');

    FCount := GetCount(Ss.DataString);

    if FCount < 0 then exit;
    FCountPages :=  Math.Ceil( FCount / 25 );

    if Assigned(FOnNextPage) then
     FOnNextPage(Self, FCountPages, FCurrentPage);;


    if FCurrentPage >= FCountPages then
    begin
      if Assigned(FOnSearchComplete) then
        FOnSearchComplete(Self);
      Exit;
    end;

    Parsing(Ss.DataString);

    Inc(FCurrentPage);
    Query(Fq, FCurrentPage);

  finally
    Ss.Free;
  end;
end;


Embarcadero® Delphi 10.3 Version 26.0.33219.4899
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
IgorPI
@IgorPI Автор вопроса
Из потока работать не будет, в моём случае, поток создавал THttpClient
То есть я не мог выполнить синхронизацию.

Решение:
Использовал класс TTHread
и выполнял синхронизацию.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@StockholmSyndrome
уберите try/except и узнаете, в какой строке ошибка
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы