The handle is invalid (что я делаю не так)

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

The handle is invalid (что я делаю не так)

Post by Shmuel » Mon 07 Nov, 2016 19:03

Вот кусок плагина (специально на Си, чтобы не подозревать LuaFAR):

Code: Select all

HANDLE PLUGIN_API OpenW (const struct OpenInfo *opInfo)
{
  if (opInfo->OpenFrom != OPEN_COMMANDLINE)
    return NULL;

  struct PanelInfo pi;
  pi.StructSize = sizeof(pi);

  if(!Info.PanelControl(PANEL_ACTIVE, FCTL_GETPANELINFO, 0, &pi))
  	return NULL;

  struct FarPanelDirectory fpd;
  memset(&fpd, 0, sizeof(fpd));
  fpd.StructSize = sizeof(fpd);
  fpd.PluginId = pi.OwnerGuid;
  fpd.Name = L"\\Addons";
  Info.PanelControl(pi.PluginHandle, FCTL_SETPANELDIRECTORY, 0, &fpd);

  return NULL;
}
В панели открыта арклайтом корневая папка дистрибутива Фар. При вызове моего плагина Арклайт сообщает

Code: Select all

╔══════════════ arclite ══════════════╗
║ The handle is invalid. (0x80070006) ║
║            open.cpp:312             ║
╟─────────────────────────────────────╢
║               { OK }                ║
╚═════════════════════════════════════╝
Что я делаю не так?

User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

The handle is invalid (что я делаю не так)

Post by zg » Mon 07 Nov, 2016 19:30

fpd.File должно содержать имя файла с архивом.

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

The handle is invalid (что я делаю не так)

Post by Shmuel » Mon 07 Nov, 2016 19:50

Да, так работает. Но непонятно, зачем это надо, почему это является необходимым.
Ну и кроме того, сообщение плагина об invalid handle вводит в заблуждение.

User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

The handle is invalid (что я делаю не так)

Post by zg » Mon 07 Nov, 2016 20:23

Shmuel wrote: Да, так работает. Но непонятно, зачем это надо, почему это является необходимым.
потому что FCTL_SETPANELDIRECTORY устанавливает абсолютно новое состояние панели вне зависимости от того, что на ней было до этого.
Shmuel wrote: Ну и кроме того, сообщение плагина об invalid handle вводит в заблуждение.
я так понимаю, это стандартное сообщение плагина. возникает оно в результате CreateFile(""), исходники открыты, можно добавить более внятное сообщение.

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

The handle is invalid (что я делаю не так)

Post by Shmuel » Mon 07 Nov, 2016 20:29

zg wrote: потому что FCTL_SETPANELDIRECTORY устанавливает абсолютно новое состояние панели вне зависимости от того, что на ней было до этого.
Тогда получается PluginHandle как бы излишний, поскольку плагин получает и имя файла, и имя директории внутри.
zg wrote: исходники открыты
Не всегда есть время.

User avatar
DrKnS
Posts: 4646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

The handle is invalid (что я делаю не так)

Post by DrKnS » Mon 07 Nov, 2016 20:57

Shmuel wrote: PluginHandle как бы излишний
Как бы да, это даже есть в документации.

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

The handle is invalid (что я делаю не так)

Post by Shmuel » Mon 07 Nov, 2016 21:57

DrKnS wrote: это даже есть в документации.
Возможно это понятно тем, кто писал эту документацию.
Впрочем не буду ворчать, спасибо за помощь.
Last edited by Shmuel on Mon 07 Nov, 2016 22:08, edited 1 time in total.

Post Reply

Return to “Разработка плагинов”