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

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

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

Post by Shmuel »

Вот кусок плагина (специально на Си, чтобы не подозревать 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: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

fpd.File должно содержать имя файла с архивом.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Да, так работает. Но непонятно, зачем это надо, почему это является необходимым.
Ну и кроме того, сообщение плагина об invalid handle вводит в заблуждение.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

Shmuel wrote: Да, так работает. Но непонятно, зачем это надо, почему это является необходимым.
потому что FCTL_SETPANELDIRECTORY устанавливает абсолютно новое состояние панели вне зависимости от того, что на ней было до этого.
Shmuel wrote: Ну и кроме того, сообщение плагина об invalid handle вводит в заблуждение.
я так понимаю, это стандартное сообщение плагина. возникает оно в результате CreateFile(""), исходники открыты, можно добавить более внятное сообщение.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

zg wrote: потому что FCTL_SETPANELDIRECTORY устанавливает абсолютно новое состояние панели вне зависимости от того, что на ней было до этого.
Тогда получается PluginHandle как бы излишний, поскольку плагин получает и имя файла, и имя директории внутри.
zg wrote: исходники открыты
Не всегда есть время.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

Shmuel wrote: PluginHandle как бы излишний
Как бы да, это даже есть в документации.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

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