падение при вызове far.GetPluginInformation

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

падение при вызове far.GetPluginInformation

Post by buniak_a_h »

Сделал простеньки скрипт:
  1. local plug1 = panel.GetPanelInfo(nil,0).PluginHandle
  2.  
  3. far.Show(plug1
  4.  
  5.          , far.GetPluginInformation(plug1)
  6.  
  7.         )
При этом на пассивной панели открыт архив в ArcLite.
Падает с диагностикой:
╔═══════════════════════════════ Exception occurred ═══════════════════════════════╗ ║ Exception: 0xC0000005 - EXCEPTION_ACCESS_VIOLATION ║ ║ Details: Memory at 000001E4A4B60D90 could not be executed ║ ║ errno: 0x00000000 - No error ║ ║ LastError: 0x00000000 - Операция успешно завершена. ║ ║ NTSTATUS: 0xC0000008 - Указан неверный дескриптор. ║ ║ Address: 0x000001E4A4B60D90 - <unknown>!<unknown> (get the pdb) ║ ║ Function: OpenW ║ ║ Source: ║ ║ File: C:\Program Files\Far Manager\Plugins\LuaMacro\LuaMacro.dll ║ ║ Plugin: LuaMacro 3.0.761.0 (Far macros in Lua, Shmuel Zeigerman & Far Group) ║ ║ Far: 3.0.5778.0 x64 (56bbd78) ║ ║ OS: 10.0.19041.2.0.0.256.1 (version 2004, OS build 19041.867) ║ ║ Kernel: 10.0.19041.867 (WinBuild.160101.0800) ║ ╟──────────────────────────────────────────────────────────────────────────────────╢ ║ [ Copy ] [ Stack ] [ Minidump ] ║ ╟──────────────────────────────────────────────────────────────────────────────────╢ ║ { Terminate Far } [ Unload plugin ] [ Ignore ] ║ ╚══════════════════════════════════════════════════════════════════════════════════╝
Если при том закомментировать строку №3 (, far.GetPluginInformation(plug1)), то всё проходит нормально.
Ещё одна странность: вот такой скрипт отрабатывает нормально:
  1. local F = far.Flags
  2.  
  3. local plug2 = far.FindPlugin(F.PFM_GUID, panel.GetPanelInfo(nil,0).OwnerGuid )
  4.  
  5. far.Show(plug2
  6.  
  7.          , far.GetPluginInformation(plug2)
  8.  
  9.         )
Я, честно говоря, думал, что плагин - хозяин панели и плагин, найденный по GUID-у панели - это один и тот же плагин , соответственно, хендлы у них одинаковые.
Вопросы.
(а) Хэндл какого плагина возвращается в поле panel.GetPanelInfo(…).PluginHandle?
(б) Падение FAR-а с нехваткой памяти - это так и задумано? Или я что-то не то сделал?
(в) Если я что-то сделал не то, то как это исправить? Или занести поле PanelInfo.PluginHandle в чёрный список и запомнить, что им для доступа к плагину пользоваться нельзя?
P/S. Оффтопик о диагностике. Может, сразу сюда и ответите.
Я, вообще-то, pdb скачивал. С тех пор много раз обновился плагином Renewal. Мне кажется (возможно, я путаю), что поначалу он скачивал и pdb. И я не знаю, почему он "не подхватился". Судя по диагностике …
Last edited by buniak_a_h on Fri 09 Apr, 2021 22:21, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

падение при вызове far.GetPluginInformation

Post by HaRT »

buniak_a_h wrote: Fri 09 Apr, 2021 22:16 (б) Падение FAR-а с нехваткой памяти - это так и задумано? Или я что-то не то сделал?
Вы неправильно истолковали диагностику, там нет ни слова о нехватке памяти.

Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

падение при вызове far.GetPluginInformation

Post by buniak_a_h »

HaRT wrote: Fri 09 Apr, 2021 22:40 Вы неправильно истолковали диагностику, там нет ни слова о нехватке памяти.
В одном из экспериментов было сообщение именно о нехватке памяти. И для меня это был первый эксперимент. Потому и отложилось в (моей) памяти. С тех пор получал регулярно AV. Ну и знаю, что при ошибке адресации вылет может быть в случайном месте и со случайной диагностикой. Просто сообщение уже ушло.
HaRT wrote: Fri 09 Apr, 2021 22:40 попробуйте … вручную скачать PDB для вашего номера сборки (и битности — x64) Фара и подложить рядом с far.exe,
Ну, я всё же не настолько по уши деревянный, это я понимаю. Скачал, подложил, даже перезапустил. Фраза (get the pdb) на месте.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

падение при вызове far.GetPluginInformation

Post by Shmuel »

buniak_a_h wrote: Fri 09 Apr, 2021 22:16

Code: Select all

plug1 = panel.GetPanelInfo(nil,0).PluginHandle
far.GetPluginInformation(plug1)
Хэндл плагина и хэндл плагиновой панели - абсолютно разные вещи, это указатели на разные структуры.
far.GetPluginInformation() должна получать параметр-хэндл плагина, а ей передан хэндл панели плагина.
LuaFAR вообще-то это детектирует и вызывает функцию luaL_error(), то есть по идее должно появиться красное окошко LuaMacro, но в реальности падает Фар.
Почему - надо разбираться (не уверен, что буду).
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

падение при вызове far.GetPluginInformation

Post by buniak_a_h »

Shmuel wrote: Fri 09 Apr, 2021 23:10 Хэндл плагина и хэндл плагиновой панели - абсолютно разные вещи
Ну я так и думал. Просто повёлся на название поля «PluginHandle» - как будто это - хэндл плагина. А, видимо, плагиновой панели
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

падение при вызове far.GetPluginInformation

Post by HaRT »

Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

падение при вызове far.GetPluginInformation

Post by Shmuel »

@Far Group: приложен патч для \plugins\luamacro\luafar\service.c
patch.diff
(817 Bytes) Downloaded 91 times
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

падение при вызове far.GetPluginInformation

Post by buniak_a_h »

Всё равно я в плагинах запутался.
Вот такой маленький макрос:
  1. Macro{
  2.  
  3.   id="6FB979E8-D96C-469A-9F44-840C07DEEB6D";
  4.  
  5.   area="Shell";
  6.  
  7.   key='ShiftF7';
  8.  
  9.   description="BAX-Test";
  10.  
  11.   flags="";
  12.  
  13.   sortpriority=10;
  14.  
  15.   action=function(data)
  16.  
  17.    local PI1 = panel.GetPanelInfo(nil,1)
  18.  
  19.    local PI2 = panel.GetPanelInfo(nil,1)
  20.  
  21.    local handle1, GUID1 = PI1.PluginHandle, PI1.OwnerGuid
  22.  
  23.    local handle2, GUID2 = PI2.PluginHandle, PI2.OwnerGuid
  24.  
  25.    --[[*D*]]win.OutputDebugString('BAX.400: '..tostring(handle1 == handle2))
  26.  
  27.   end;
  28.  
  29. }
Запускается из панели ArcLite-а.
По логике handle1 должен быть абсолютно равен handle2 (ну, т.к. это одна и та же панель, и за время от строки 9 до строки 10 ничего не поменялось. Однако хендл панели поменялся. Такое впечатление, что он генерируется при каждом запросе GetPanelInfo и к панели не привязан. К сожалению, в документации эти поля вообще не описаны.
Ещё: handle1:rawhandle() и handle2:rawhandle() - равны.
На самом деле меня интересует, какой хендл надо указывать в far.host.GetFiles
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

падение при вызове far.GetPluginInformation

Post by Shmuel »

Если предложенный патч будет применён, то rawhandle для этого элемента больше не будет существовать (и придётся править скрипты тем, кто его пользовал).
И нужен будет ещё один патч, удаляющий упоминание о rawhandle из статьи мануала panel.GetPanelInfo.
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

падение при вызове far.GetPluginInformation

Post by 2useven10 »

buniak_a_h wrote: Fri 09 Apr, 2021 22:16 Renewal. Мне кажется (возможно, я путаю), что поначалу он скачивал и pdb.
Путаете. Renewal никогда не скачивал pdb.
Shmuel wrote: Fri 09 Apr, 2021 23:10 plug1 = panel.GetPanelInfo(nil,0).PluginHandle
Здесь имя провоцирует неверное трактование.
Может быть стоило бы сделать panel.GetPanelInfo(nil,0).PluginPanelHandle
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

падение при вызове far.GetPluginInformation

Post by buniak_a_h »

2useven10, ну я так и подумал:
buniak_a_h wrote: Fri 09 Apr, 2021 23:20 повёлся на название поля «PluginHandle» - как будто это - хэндл плагина
Имя поля путает…
2useven10 wrote: Sat 10 Apr, 2021 08:12 Renewal никогда не скачивал pdb
Значит, я перепутал с UpdateEx. Сам фар UpdateEx обновлял лучше. Жаль, что плагины не обновлял.
Last edited by buniak_a_h on Sat 10 Apr, 2021 08:26, edited 1 time in total.
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

падение при вызове far.GetPluginInformation

Post by 2useven10 »

User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

падение при вызове far.GetPluginInformation

Post by John Doe »

2useven10 wrote: Sat 10 Apr, 2021 08:53 сборки на гитхабе включают pdb плагинов в архив
А renewal не оттуда обновляет?
buniak_a_h wrote: Sat 10 Apr, 2021 08:23 Сам фар UpdateEx обновлял лучше.
И чем же лучше?
pdb он не скачивал никогда самостоятельно.
Хотя через PostInstall можно было приделать батничек
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

падение при вызове far.GetPluginInformation

Post by John Doe »

Shmuel wrote: Sat 10 Apr, 2021 02:56 Если предложенный патч будет применён, то rawhandle для этого элемента больше не будет существовать
Т.е. функциональность уменьшится. Предлагаю тогда не применять этот патч.
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

падение при вызове far.GetPluginInformation

Post by Shmuel »

2useven10 wrote: Sat 10 Apr, 2021 08:12
Shmuel wrote: Fri 09 Apr, 2021 23:10 plug1 = panel.GetPanelInfo(nil,0).PluginHandle
Здесь имя провоцирует неверное трактование.
Может быть стоило бы сделать panel.GetPanelInfo(nil,0).PluginPanelHandle
Да, здесь имя послужило причиной и моей ошибки, которая исправляется предложенным патчем.
Но это имя из Far API (из структуры PanelInfo), а LuaFAR точно следует именам членов структур Far API.
John Doe wrote: Sat 10 Apr, 2021 09:35 Т.е. функциональность уменьшится. Предлагаю тогда не применять этот патч.
(1) Если под уменьшением функциональности имеется в виду потеря полезных свойств rawhandle, то после этого патча этот элемент сам становится "raw", и сможет применяться везде, где раньше использовался rawhandle.
(2) На применении патча не настаиваю.
Last edited by Shmuel on Sat 10 Apr, 2021 10:14, edited 1 time in total.
Post Reply

Return to “Нужна помощь”