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

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

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

Postby 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: 5186
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 40 times
Contact:

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

Postby zg » Mon 07 Nov, 2016 19:30

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

Shmuel
Posts: 4908
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 118 times

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

Postby Shmuel » Mon 07 Nov, 2016 19:50

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

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

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

Postby zg » Mon 07 Nov, 2016 20:23

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

Shmuel
Posts: 4908
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 118 times

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

Postby Shmuel » Mon 07 Nov, 2016 20:29

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

User avatar
DrKnS
Posts: 4434
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 101 times
Contact:

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

Postby DrKnS » Mon 07 Nov, 2016 20:57

Shmuel wrote:Source of the post PluginHandle как бы излишний

Как бы да, это даже есть в документации.

Shmuel
Posts: 4908
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 118 times

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

Postby Shmuel » Mon 07 Nov, 2016 21:57

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


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

Who is online

Users browsing this forum: Google Feedfetcher and 3 guests