powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / поиск ошибки при переходе на x64
18 сообщений из 18, страница 1 из 1
поиск ошибки при переходе на x64
    #39976445
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пытаюсь выловить или для начала хотя бы понять, из-за чего вылетает ошибка
First chance exception at $0000000000FBA468. Exception class $C00000FD with message 'c00000fd STACK_OVERFLOW'.

Call Stack:
ecPopupCtrl.TParamCompletion.ParentWndProc($34050)
System.Classes.StdWndProc(???,???,???,???)
:0000000077139BBD ; C:\Windows\system32\USER32.dll
:0000000077133B94 ; C:\Windows\system32\USER32.dll
:0000000077133B10 ; C:\Windows\system32\USER32.dll
ecPopupCtrl.TPopupControl.CallWndProc(3673286,$3850F30,$342E0)
ecPopupCtrl.TPopupControl.ParentWndProc($342E0)
ecPopupCtrl.TParamCompletion.ParentWndProc($342E0)
System.Classes.StdWndProc(???,???,???,???)

....много того же самого....

System.Classes.StdWndProc(???,???,???,???)
ecPopupCtrl.TPopupControl.CallWndProc(3673286,$3850F30,$12FC90)
ecPopupCtrl.TPopupControl.ParentWndProc($12FC90)
ecPopupCtrl.TParamCompletion.ParentWndProc($12FC90)
System.Classes.StdWndProc(???,???,???,???)
Vcl.Forms.TApplication.ProcessMessage(???)
Vcl.Forms.TApplication.HandleMessage
Vcl.Forms.TApplication.Run


Повторяется довольно тяжело, без системы - 1 раз вылетело в считанные секунды, а в остальные разы минут по 5-10 надо сидеть и заниматься ерундой, вызывая эти popup окна.

Msg во всех случаях - EP_SIZECHANGING, wparam, lparam = 0.

шлется оно только из одного места:

Код: pascal
1.
2.
3.
4.
5.
6.
procedure TecPopupContainer.Resize;
begin
  inherited;
  if Assigned(Parent) then
    PostMessage(Parent.Handle, EP_SIZECHANGING, 0, 0);
end;



я уже по несколько раз перепахал все Post и SendMessage и их параметры, криминала не нашел.
l3DebugUtils подключен, и в первое время довольно активно работал, показывая проблемные места.

Подскажите, куда стоит копать?
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976470
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rшлется оно только из одного места

Так надо смотреть не туда, откуда оно шлётся, а туда, где обрабатывается. Call Stack тебе
недвусмысленно указывает этот кусок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976477
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,

Из ресайза наверняка вызываешь что-то вызывающее изменение размеров, вот и зацикливание.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976478
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом случае оно бы зацикливалось и на 32-х битах. Типичная ошибка при сабже -
Integer(Pointer) и наоборот.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976479
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

В этом случае оно бы зацикливалось и на 32-х битах. Типичная ошибка при сабже -
Integer(Pointer) и наоборот.

за 10 лет ничего такого на x86 и близко не было.

Уже везде искал все касты Integer, переводил на NativeInt, смысл не поменялся.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976485
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r

Уже везде искал все касты Integer, переводил на NativeInt, смысл не поменялся.
Надо еще поискать, скорее всего где-то память портится.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976511
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rУже везде искал

Повторяю медленно: смотреть надо в конкретный ecPopupCtrl.TParamCompletion.ParentWndProc()
и далее по стэку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976514
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Vizit0rУже везде искал

Повторяю медленно: смотреть надо в конкретный ecPopupCtrl.TParamCompletion.ParentWndProc()
и далее по стэку.


смотрел, внимательно.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TParamCompletion.ParentWndProc(var Message: TMessage);
begin
  if (Message.Msg = CM_CANCELMODE) and (Message.LParam <> 0)
  {$IFNDEF EC_DOTNET}
     and (TComponent(Message.LParam).Owner = Popup)
  {$ENDIF}
    then Exit;
  inherited;
end;



через inherited он идет в


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
procedure TPopupControl.ParentWndProc(var Message: TMessage);
var msg: tagMsg;
begin
  case Message.Msg of
....
    EP_SIZECHANGING:
      if FToolHint.Visible then
        FToolHint.RefreshHintWnd;
...
  end;

  CallWndProc(FParent.Handle, _FParentWndProc, Message);
end;


procedure TecToolHint.RefreshHintWnd;
var R: TRect;
begin
  if Active and TSyntMemoPopup(Owner).Visible and (FText <> '') then
    begin
      if CalculateLayout(Constraints, FLayoutSide, FMinMaxWidth,
            IntCalcSize, TSyntMemoPopup(Owner).GetPopupRect, R)  then
        begin
          // hint activation
          UpdateBoundsRect(R);
          if Application.MainForm.HelpContext = 0 then
            ParentWindow := Application.Handle
          else
            ParentWindow := TForm(Application.MainForm.HelpContext).Handle;
          SetWindowPos(Handle, HWND_TOPMOST, R.Left, R.Top, Width, Height,
            SWP_NOACTIVATE or SWP_SHOWWINDOW{ or SWP_NOREDRAW});
          Invalidate;
        end else
          ReleaseHandle;
    end else
      ReleaseHandle;
end;



я уже в отладке смотрел, оно не вызывает Resize никак.

Ладно, буду копать дальше.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976521
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Косвенно - АВ может и там, а кто напортачил перед тем - хз ...
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976522
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,

TForm(Application.MainForm.HelpContext).Handle
?

TControl.HelpContext объявлен как THelpContext, который объявлен: THelpContext = -MaxLongint..MaxLongint
А это 32х битное число вне зависимости от разрядности целевой платформы.
Попробуй использовать MainForm.Tag.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976530
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphinotesПопробуй использовать MainForm.Tag.

А этот вообще Integer. Не надо его использовать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976551
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r,

отлов использования 32-битных приведений - очень хороший способ (можно и в релизе использовать)

по поводу сабжа, для начала заменил бы PostMessage на System.Classes.TThread.ForceQueue
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976572
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Vizit0r,
отлов использования 32-битных приведений - очень хороший способ (можно и в релизе использовать)


Vizit0r
l3DebugUtils подключен, и в первое время довольно активно работал, показывая проблемные места.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976578
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
delphinotesПопробуй использовать MainForm.Tag.

А этот вообще Integer. Не надо его использовать.

В XE7 объявлен как NativeInt.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976667
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
delphinotesПопробуй использовать MainForm.Tag.

А этот вообще Integer.NativeInt с незапамятных времен
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976882
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за бред TForm(Application.MainForm.HelpContext).Handle?

Скорее должно быть что-то вроде Screen.ActiveForm.Handle
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976885
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
Скорее должно быть что-то вроде Screen.ActiveForm.Handle
Должен быть наследник TForm с понятным свойством правильного типа, без попытки впихнуть невпихуемое куда попало.
...
Рейтинг: 0 / 0
поиск ошибки при переходе на x64
    #39976903
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
white_nigger
Скорее должно быть что-то вроде Screen.ActiveForm.Handle
Должен быть наследник TForm с понятным свойством правильного типа, без попытки впихнуть невпихуемое куда попало.
Идеал недостижим)) возможно это древний сторонний компонент, который писали когда о 64 битах ещё не слыхали и Integer был наше всё))
...да и писали как могли...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / поиск ошибки при переходе на x64
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]